创建MSBuild目标挂钩

时间:2011-03-01 00:43:39

标签: msbuild hook target

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

我正在寻找能让我定义在指定目标之前和之后运行的目标的东西。我知道这可以使用DependsOnTargets属性完成,但我已经看到了使用目标钩子的引用,我想探索那个区域。

谢谢, 扎因

2 个答案:

答案 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