2011-03-01 62 views
1

有人可以请我指向关于MSBuild中的目标钩子的引用吗?创建MSBuild目标钩子

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

感谢, Zain公司

回答

3

可以找到一个内置的可重写构建过程钩子的好列表here.对于自定义目标,我唯一能想到的就是使用DependsOnTarget属性(如您提到的)或BeforeTargets/AfterTargets属性(如)小心,BeforeTargets/AfterTargets只有available in MSBuild 4.0

+0

它看起来像BeforeTargets/AfterTargets是我找到引用的钩子。不幸的是,他们并没有为DependsOnTargets构建完美的子目录,因为他们不会保证*目标何时运行,只是它会在某个其他目标之前/之后运行。 – 2011-03-01 22:09:41

+0

BeforeTargets在* DependsOnTargets之后和目标本身之前运行*。 – radical 2011-03-01 22:30:52

4

如果你了解DependsOnTargets背后的想法,然后打开在.NET SDK目录中的文件Microsoft.Common.targets(C:\ WINDOWS \ Microsoft.NET \框架\ v3.5版本)。该文件定义了由Visual Studio创建的MSBuild任务和.Net项目的构建过程。寻找名为BeforeXXXX和AfterXXXX的标签。 BeforeBuild和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>