创建MSBuild目标挂钩

创建MSBuild目标挂钩,msbuild,hook,target,Msbuild,Hook,Target,有人能给我指一下有关MSBuild中目标挂钩的参考资料吗 我正在寻找一些可以让我定义在指定目标之前和之后运行的目标的东西。我知道这可以使用DependsOnTargets属性来完成,但我已经看到了使用目标挂钩的参考资料,我想探索一下这个领域 谢谢, Zain如果您理解DependsOnTargets背后的思想,请打开.Net SDK目录(C:\Windows\Microsoft.Net\Framework\v3.5)中的Microsoft.Common.targets文件。该文件定义了Visua

有人能给我指一下有关MSBuild中目标挂钩的参考资料吗

我正在寻找一些可以让我定义在指定目标之前和之后运行的目标的东西。我知道这可以使用DependsOnTargets属性来完成,但我已经看到了使用目标挂钩的参考资料,我想探索一下这个领域

谢谢,
Zain

如果您理解DependsOnTargets背后的思想,请打开.Net SDK目录(C:\Windows\Microsoft.Net\Framework\v3.5)中的Microsoft.Common.targets文件。该文件定义了Visual Studio创建的MSBuild任务和.Net项目的生成过程。查找名为BeforeXXXX和AfterXXXX的标记。PreforeBuild和AfterBuild在default.csproj文件中引用-代码段:

    <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 Name="CreateDir">
    <MakeDir Directories="D:\Dogs.txt"/>
</Target>

然后将这些目标包括在BeforeXXX目标中:

       <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
    <Target Name="BeforeBuild" BeforeTargets="CreateDir">
    </Target>
 </Project>


可以为自定义目标找到一个很好的内置可重写构建过程挂钩列表,我唯一能想到的是使用DependsOnTarget属性(如您所述)或BeforeTargets/postertargets属性(如@Ritch Melton所述)小心,BeforeTargets/AfterTargets只是

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