讓 MSBuild Target 支援 Clean
- 2020 年 2 月 10 日
- 筆記
我們有時候會使用解決方案的清理(Clean)功能來解決一些項目編譯過程中非常詭異的問題。這通常是一些 Target 生成了一些錯誤的中間文件,但又不知道到底是哪裡錯了。
我們自己編寫 Target 的時候,也可能會遇到這樣的問題,所以讓我們自己的 Target 也能支援 Clean 可以在遇到詭異問題的時候,用戶可以自己通過清理解決方案來消除錯誤。
以下程式碼來自於 SourceFusion/Package.targets。這是我主導開發的一個預編譯框架,用於在編譯期間執行各種程式碼,以便優化程式碼的運行期性能。
<PropertyGroup> <CleanDependsOn>$(CleanDependsOn);_SourceFusionClean</CleanDependsOn> </PropertyGroup> <!--清理 SourceFusion 計算所得的文件--> <Target Name="_SourceFusionClean"> <PropertyGroup> <_DefaultSourceFusionWorkingFolder Condition="'$(_DefaultSourceFusionWorkingFolder)' == ''">obj$(Configuration)</_DefaultSourceFusionWorkingFolder> <SourceFusionWorkingFolder Condition="'$(SourceFusionWorkingFolder)' == ''">$(_DefaultSourceFusionWorkingFolder)</SourceFusionWorkingFolder> <SourceFusionToolsFolder>$(SourceFusionWorkingFolder)SourceFusion.Tools</SourceFusionToolsFolder> <SourceFusionGeneratedCodeFolder>$(SourceFusionWorkingFolder)SourceFusion.GeneratedCodes</SourceFusionGeneratedCodeFolder> </PropertyGroup> <RemoveDir Directories="$(SourceFusionToolsFolder);$(SourceFusionGeneratedCodeFolder)" /> </Target>
這段程式碼的作用便是支援 Visual Studio 中的解決方案清理功能。通過指定 CleanDependsOn 屬性的值給一個新的 Target,使得在 Clean 的時候,這個 Target 能夠執行。我在 Target 中刪除了我生成的所有中間文件。
你可以通過閱讀 通過重寫預定義的 Target 來擴展 MSBuild / Visual Studio 的編譯過程 來了解這個 Target 是如何工作起來的。
參考資料
本文會經常更新,請閱讀原文: https://blog.walterlv.com/post/support-clean-for-msbuild-target.html ,以避免陳舊錯誤知識的誤導,同時有更好的閱讀體驗。
本作品採用 知識共享署名-非商業性使用-相同方式共享 4.0 國際許可協議 進行許可。歡迎轉載、使用、重新發布,但務必保留文章署名 呂毅 (包含鏈接: https://blog.walterlv.com ),不得用於商業目的,基於本文修改後的作品務必以相同的許可發布。如有任何疑問,請 與我聯繫 ([email protected]) 。
