请问有没有关于MSBuild目标钩子的参考资料?我想找一些可以在指定目标之前或之后运行的目标定义方法。我知道可以使用DependsOnTargets属性来实现,但我看到了一些关于使用目标钩子的参考资料,我希望能够探索这个领域。
谢谢, Zain
可以在这里找到一个很好的内置可覆盖构建过程钩子列表。对于自定义目标,我能想到的唯一方法就是使用DependsOnTarget属性(就像您提到的那样)或BeforeTargets/AfterTargets属性(就像@Ritch Melton所提到的那样)。请注意,BeforeTargets/AfterTargets仅适用于MSBuild 4.0。
如果你理解DependsOnTargets背后的思想,那么请打开.Net SDK目录下的Microsoft.Common.targets文件(C:\Windows\Microsoft.NET\Framework\v3.5)。该文件定义了由Visual Studio创建的MSBuild任务和.Net项目的构建过程。查找名为BeforeXXXX和AfterXXXX的标签。default.csproj文件中引用了BeforeBuild和AfterBuild - 代码片段:
<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元素内定义一个目标(或多个目标),像这样(根据Directories属性的值创建目录或目录列表):
<Target Name="CreateDir">
<MakeDir Directories="D:\Dogs.txt"/>
</Target>
然后将这些目标包含在 BeforeXXX 目标中:
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Target Name="BeforeBuild" BeforeTargets="CreateDir">
</Target>
</Project>