【发布时间】:2011-03-01 00:43:39
【问题描述】:
有人可以指点我有关 MSBuild 中目标挂钩的参考吗?
我正在寻找可以让我定义在指定目标之前和之后运行的目标的东西。我知道这可以使用 DependsOnTargets 属性来完成,但我已经看到使用目标挂钩的参考,我想探索该领域。
谢谢, 扎因
【问题讨论】:
有人可以指点我有关 MSBuild 中目标挂钩的参考吗?
我正在寻找可以让我定义在指定目标之前和之后运行的目标的东西。我知道这可以使用 DependsOnTargets 属性来完成,但我已经看到使用目标挂钩的参考,我想探索该领域。
谢谢, 扎因
【问题讨论】:
可以找到一个很好的内置可覆盖构建过程挂钩列表here. 对于自定义目标,我唯一能想到的就是使用 DependsOnTarget 属性(如您提到的)或 BeforeTargets/AfterTargets 属性(就像@Ritch Melton 提到的那样。)小心,BeforeTargets/AfterTargets 只有available in MSBuild 4.0
【讨论】:
如果您了解 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>
【讨论】: