簡體   English   中英

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

[英]Run an MSBuild target only if project is actually built

我有一個MSBuild文件,用於構建* / .sln文件(構建所有存在的.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的屬性,其值為OnOutputUpdatedCoreBuild目標的依賴關系將最終記錄構建之前和之后的輸出文件的時間戳。 如果它們相等,則輸出不會構建。 所以剩下的就是讓你的目標在CoreBuild之后CoreBuild並檢查這些時間戳。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM