如何在csproj building sln中指定MSBuild build自定义目标?

如何在csproj building sln中指定MSBuild build自定义目标?,msbuild,msbuild-task,Msbuild,Msbuild Task,我面临着MSBuild的问题,我自己无法克服它。因此,我依靠社区的智慧 我遇到麻烦的真实情况 我有一个soluiton文件,其中包含几个项目,这些项目与同一解决方案中的其他项目具有依赖关系。我想在项目的一个csproj文件中附加一个自定义目标,并从命令行生成它。它将允许我为这个项目生成所有必要的输出二进制文件,以便在构建自定义目标期间进行进一步处理。但最重要的是我不知道怎么做,谷歌搜索也帮不上忙 简化 为了使事情更简单,我决定创建一个新的C#console项目,在项目文件中添加一个简单的自定义目

我面临着
MSBuild
的问题,我自己无法克服它。因此,我依靠社区的智慧

我遇到麻烦的真实情况

我有一个soluiton文件,其中包含几个项目,这些项目与同一解决方案中的其他项目具有依赖关系。我想在项目的一个csproj文件中附加一个自定义目标,并从命令行生成它。它将允许我为这个项目生成所有必要的输出二进制文件,以便在构建自定义目标期间进行进一步处理。但最重要的是我不知道怎么做,谷歌搜索也帮不上忙

简化

为了使事情更简单,我决定创建一个新的C#console项目,在项目文件中添加一个简单的自定义目标,并尝试构建它。还是没有成功!以下是我迄今为止所做的工作:

  • 已创建具有默认控制台项目coreapp的解决方案应用程序。这给了我至少两个文件:

    • app.sln
    • coreapp\coreapp.csproj
  • 修改了coreapp.csproj,在项目标记中添加了我的自定义目标

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

    %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:项目中不存在目标“coreapp.csproj:SampleTarget”。

    我怀疑
    MSBuild
    的想法与我希望它的想法根本不同

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

    问题是如何在这个简化场景中使用解决方案文件构建SampleTarget,因为它可能包含包含此SampleTarget目标的项目的依赖项


    我非常乐意为进一步调查提供任何帮助或帮助

    一个选项是通过覆盖适当的DependsOn属性将SampleTarget绑定到标准构建目标。在这种情况下,您可以告诉BeforeBuild它依赖于SampleTarget,或者您对AfterBuild做同样的事情。这将确保MSBuild在指定的标准目标之前处理您的目标。

    您可以尝试创建一个新的独立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