Dot-Net
僅在實際建構項目時執行 MSBuild 目標
我有一個建構 * / .sln 文件的 MSBuild 文件(建構所有存在的 .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