Dot-Net

僅在實際建構項目時執行 MSBuild 目標

  • December 20, 2012

我有一個建構 * / .sln 文件的 MSBuild 文件(建構所有存在的 .sln 文件)。

建構使用Build目標,因此如果沒有對輸入文件進行任何更改,則不應再次建構任何項目。

僅當項目實際上再次建構時,我才想執行一些自定義目標。

如何才能做到這一點?

無論編譯/建構是否實際發生,都始終呼叫AfterBuildAfterCompile 。

基本上你想要與例如相同的行為PostBuildEvent,所以我查找了Microsoft.Common.Targets它是如何做到的(這個文件總是提供了一個很好的洞察力來了解 msbuild 應該如何使用)。這是解決方案:

<PropertyGroup>
 <RunPostBuildEvent>OnOutputUpdated</RunPostBuildEvent>
</PropertyGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Target Name="RunWhenBuild" AfterTargets="CoreBuild"       
       Condition="'$(_AssemblyTimestampBeforeCompile)'!='$(_AssemblyTimestampAfterCompile)'">
 <Message Importance="high" Text="RunWhenBuild!!"/>
</Target>

這就是發生的事情:當有一個以目標的依賴值命名的屬性時,最終RunPostBuildEvent將記錄輸出文件在建構之前和之後的時間戳。如果它們相等,則不會生成輸出。所以剩下的就是讓你的目標執行並檢查這些時間戳。OnOutputUpdated``CoreBuild``CoreBuild

引用自:https://stackoverflow.com/questions/13972820