[英]Run an MSBuild target only if project is actually built
我有一個MSBuild文件,用於構建* / .sln文件(構建所有存在的.sln文件)。
構建使用Build目標,因此如果沒有對輸入文件進行任何更改,則不應再次構建任何項目。
我想只在項目實際上再次構建時才執行一些自定義目標。
如何才能做到這一點?
無論編譯/構建是否實際發生,都始終調用AfterBuild和AfterCompile 。
基本上你需要和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
之后CoreBuild
並檢查這些時間戳。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.