有人可以指点我参考MSBuild中的目标钩子吗?
我正在寻找能让我定义在指定目标之前和之后运行的目标的东西。我知道这可以使用DependsOnTargets属性完成,但我已经看到了使用目标钩子的引用,我想探索那个区域。
谢谢, 扎因
答案 0 :(得分:4)
如果您了解DependsOnTargets背后的想法,请打开.Net SDK目录(C:\ Windows \ Microsoft.NET \ Framework \ v3.5)中的Microsoft.Common.targets文件。该文件定义了Visual Studio创建的MSBuild任务和.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>
还有其他一些,如清洁,重建等。
定义要在这些Target元素内执行的目标(或目标),如下所示(根据目录属性中的值创建目录或目录列表:
<Target Name="CreateDir">
<MakeDir Directories="D:\Dogs.txt"/>
</Target>
然后在BeforeXXX目标中包含这些目标:
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Target Name="BeforeBuild" BeforeTargets="CreateDir">
</Target>
</Project>
答案 1 :(得分:4)
可以找到一个很好的内置可覆盖构建进程挂钩列表here.对于自定义目标,我唯一能想到的是使用DependsOnTarget属性(如你所提到的)或BeforeTargets / AfterTargets属性(如@Ritch Melton提到的那样。)注意,BeforeTargets / AfterTargets仅为available in MSBuild 4.0