创建MSBuild目标钩子

4

请问有没有关于MSBuild目标钩子的参考资料?我想找一些可以在指定目标之前或之后运行的目标定义方法。我知道可以使用DependsOnTargets属性来实现,但我看到了一些关于使用目标钩子的参考资料,我希望能够探索这个领域。

谢谢, Zain

2个回答

7

可以在这里找到一个很好的内置可覆盖构建过程钩子列表。对于自定义目标,我能想到的唯一方法就是使用DependsOnTarget属性(就像您提到的那样)或BeforeTargets/AfterTargets属性(就像@Ritch Melton所提到的那样)。请注意,BeforeTargets/AfterTargets仅适用于MSBuild 4.0


看起来BeforeTargets/AfterTargets是我找到的钩子的参考。不幸的是,它们并不能完美地替代DependsOnTargets,因为它们不能保证目标将在何时运行,只能保证它将在某个其他目标之前/之后的某个时间运行。 - Zain Rizvi
BeforeTargets 在 DependsOnTargets 之后运行,但在目标本身之前运行。 - radical

5

如果你理解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>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接