2011-03-01 59 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>