msbuild - 如何使 MSBuild 构建在 csproj 构建 sln 中指定的自定义目标?

标签 msbuild msbuild-task

我遇到了 MSBuild 的问题我自己无法克服它。因此,我依靠社区的智慧。

真实情况我遇到了问题

我有一个包含多个项目的解决方案文件,这些项目依赖于同一解决方案中的其他项目。我想将自定义目标附加到项目的 csproj 文件之一并从命令行构建它。它将允许我为此项目制作所有必要的输出二进制文件,以便在构建自定义目标期间进行进一步处理。但最主要的是我不知道该怎么做,谷歌搜索也无济于事。

简化

为了让事情更简单,我决定创建一个新的 C# 控制台项目,在项目文件中添加一个简单的自定义目标并尝试构建它。还是没有成功!这是我到目前为止所做的:

  • 使用默认控制台项目 coreapp 创建了一个解决方案应用程序。这给了我至少两个文件:
  • app.sln
  • coreapp\coreapp.csproj
  • 修改了 coreapp.csproj,在 Project 标签内添加了我的自定义目标
    <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: The target "coreapp.csproj:SampleTarget" does not exist in the project.
    我怀疑 MSBuild认为一些与我希望它思考的根本不同的东西......

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

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

    对于进一步调查的任何形式的帮助或解雇,我将不胜感激!

    最佳答案

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

    关于msbuild - 如何使 MSBuild 构建在 csproj 构建 sln 中指定的自定义目标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8404114/

    相关文章:

    c#-4.0 - 从自定义任务中调用 MSBuild 任务

    .net - 设置仅在从 Visual Studio 而非构建服务器构建项目时执行的构建步骤

    tfs - 从 MSBuild 启动桌面应用程序

    .net - 在没有 Visual Studio 2010 的 Build Machine 中通过 MSbuild 发布

    c++ - 错误 LNK2038 : mismatch detected for '_MSC_VER' : value '1600' doesn't match value '1700' in CppFile1. 对象

    c# - csproj LangVersion 属性覆盖任何导入的项目

    visual-studio - 在第一次编译\链接错误时停止解决方案构建 - msbuild

    visual-studio - msbuild 自定义任务

    azure - 在 msbuild 后复制文件将其复制到根文件夹 $(build.ArtifactStagingDirectory)

    msbuild - MSBuild复制命令的详细程度