2011-12-06 40 views
5

我面临着一个问题MSBuild我自己无法克服它。因此我依靠社区的智慧。如何让MSBuild构建csproj构建sln中指定的自定义目标?

我有麻烦与

我有一个包含几个项目具有相关性在同一个解决方案的其他项目soluiton文件的真实情况。我想将自定义目标附加到项目的一个csproj文件并从命令行构建它。这将允许我为此项目制作所有必要的输出二进制文件,以便在构建自定义目标期间进一步处理。但主要的是,我不知道如何去做,谷歌搜索也没有帮助。

简化

为了让事情simplier我决定做一个新的C#控制台项目,一个简单的自定义目标添加到项目的文件,并努力使之建立。仍然没有成功!这里我到目前为止所做的:

  1. 创建一个解决方案的应用程序与默认控制台项目coreapp。这gaves我至少有两个文件:

    • app.sln
    • coreapp \ coreapp.csproj
  2. 修改coreapp.csproj与另外我的自定义目标的项目标签内

    <Target Name="SampleTarget"> 
        <Message Text="This is a SampleTarget" /> 
    </Target> 
    
  3. 在命令行上运行以下命令

    %windir%\Microsoft.NET\framework\v3.5\msbuild.exe app.sln /t:coreapp:SampleTarget

    甚至

    %windir%\Microsoft.NET\framework\v3.5\msbuild.exe app.sln /t:coreapp.csproj:SampleTarget

结果

没有运气,面对错误

MSB4057: The target "coreapp.csproj:SampleTarget" does not exist in the project.

我怀疑MSBuild认为服用点从我希望它认为根本的不同...

除此之外,我也试图在同一命令行上设置环境变量MSBuildEmitSolution = 1,以强制的MSBuild转储一个临时解决方案在处理解决方案时创建它。在这个文件中,确实没有这样的目标。不过,我想这不是原因,因为我让msbuild构建目标SampleTarget真正驻留的coreapp.proj。

问题是如何使用解决方案文件在此简化方案中构建SampleTarget,因为它可以包含包含此SampleTarget目标的项目的依赖关系?

我很乐意为任何形式的帮助或火力进一步调查!

+0

这是否帮助? http://stackoverflow.com/questions/3397460/custom-common-target-to-build-a-solution –

回答

0

一个选项是通过覆盖相应的DependsOn属性将SampleTarget绑定到标准Build目标。在这种情况下,你可以告诉BeforeBuild它取决于SampleTarget,或者你用AfterBuild做同样的事情。这将确保MSBuild在指定的标准目标之前处理您的目标。

2

而是在你的项目文件中插入一个自定义的目标,你可以尝试创建一个新的独立的MSBuild文件,该文件将:

  • 构建解决方案文件(建立项目)
  • 定义你的额外目标

例如,将其称为app-custom-Debug.msbuild。

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
    <WorkingFolder>$(MSBuildProjectDirectory)</WorkingFolder> 
    <Configuration>Debug</Configuration> 
    <SolutionFile>app.sln</SolutionFile> 
    </PropertyGroup> 

    <Target Name="Build" DependsOnTargets="Compile" /> 

    <Target Name="Compile"> 
    <Message Text="=== COMPILING $(Configuration) configuration ===" /> 
    <MSBuild Projects="$(SolutionFile)" 
      Properties="Configuration=$(Configuration)" /> 
    </Target> 

    <Target Name="SampleTarget"> 
    <Message Text="This is a SampleTarget" /> 
    </Target> 

</Project> 

然后你执行:

msbuild.exe app-custom-Debug.msbuild /t:SampleTarget