【问题标题】:Creating MSBuild target hooks创建 MSBuild 目标挂钩
【发布时间】:2011-03-01 00:43:39
【问题描述】:

有人可以指点我有关 MSBuild 中目标挂钩的参考吗?

我正在寻找可以让我定义在指定目标之前和之后运行的目标的东西。我知道这可以使用 DependsOnTargets 属性来完成,但我已经看到使用目标挂钩的参考,我想探索该领域。

谢谢, 扎因

【问题讨论】:

    标签: msbuild hook target


    【解决方案1】:

    可以找到一个很好的内置可覆盖构建过程挂钩列表here. 对于自定义目标,我唯一能想到的就是使用 DependsOnTarget 属性(如您提到的)或 BeforeTargets/AfterTargets 属性(就像@Ritch Melton 提到的那样。)小心,BeforeTargets/AfterTargets 只有available in MSBuild 4.0

    【讨论】:

    • 看起来 BeforeTargets/AfterTargets 是我发现引用的钩子。不幸的是,他们不能完美替代 DependsOnTargets,因为他们不保证 when 目标将运行,只是保证它会在其他目标之前/之后运行 sometime .
    • BeforeTargets 在 DependsOnTargets 之后和目标本身之前运行。
    【解决方案2】:

    如果您了解 DependsOnTargets 背后的想法,请打开 .Net SDK 目录 (C:\Windows\Microsoft.NET\Framework\v3.5) 中的 Microsoft.Common.targets 文件。该文件定义了 MSBuild 任务和由 Visual Studio 创建的 .Net 项目的构建过程。查找名为 BeforeXXXX 和 AfterXXXX 的标签。在 default.csproj 文件中引用了 BeforeBuild 和 AfterBuild - Snippet:

        <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
         <!-- To modify your build process, add your task inside one of the targets below and uncomment it.  Other similar extension points exist, see Microsoft.Common.targets.
      <Target Name="BeforeBuild">
      </Target>
      <Target Name="AfterBuild">
      </Target>
    -->
    </Project>
    

    还有其他的,例如 Clean、Rebuild 等。

    定义一个(或多个目标)以在这些 Target 元素中执行,如下所示(根据 Directories 属性中的值创建一个目录或目录列表:

        <Target Name="CreateDir">
        <MakeDir Directories="D:\Dogs.txt"/>
    </Target>
    

    然后在 BeforeXXX 目标中包含这些目标:

           <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
        <Target Name="BeforeBuild" BeforeTargets="CreateDir">
        </Target>
     </Project>
    

    【讨论】:

      猜你喜欢
      • 2021-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多