我有一個自定義MSBuild任務的庫,我經常編輯它,重構代碼,添加新任務並刪除舊的,不存在的任務。編輯.Targets文件以與庫中的實際內容同步是一件很痛苦的事情,所以我想知道,什麼是自動執行此操作的最佳方式?以編程方式生成自定義MSBuild .Targets文件
我想要一個在庫成功構建後運行的解決方案,以便在嘗試從其他項目調用自定義任務時不會出現任何令人討厭的錯誤。
我對如何做到這一點有一些想法,但我想看看其他人首先想到的。 :-)
我有一個自定義MSBuild任務的庫,我經常編輯它,重構代碼,添加新任務並刪除舊的,不存在的任務。編輯.Targets文件以與庫中的實際內容同步是一件很痛苦的事情,所以我想知道,什麼是自動執行此操作的最佳方式?以編程方式生成自定義MSBuild .Targets文件
我想要一個在庫成功構建後運行的解決方案,以便在嘗試從其他項目調用自定義任務時不會出現任何令人討厭的錯誤。
我對如何做到這一點有一些想法,但我想看看其他人首先想到的。 :-)
好吧,我已經找到了一種更好的方式使用MSBuild Community Task的TaskSchema
任務來實現這一目標:
<TaskSchema Assemblies="@(MyTaskAssembly)"
OutputPath="%(MyTaskAssembly.RootDir)%(MyTaskAssembly.Directory)"
CreateTaskList="true"
IgnoreMsBuildSchema="true"
Includes="Microsoft.Build.Commontypes.xsd"/>
我只是確保我已經導入了MSBuild.Community.Tasks.Targets文件,創建一個名爲MyTaskAssembly
的ItemGroup
,其中包含我所有的任務程序集(令人震驚),然後將上述任務調用粘貼到我的項目的AfterBuild
目標中。甜! :)
您可能有一個單獨的.targets文件,其中只包含對您的任務的引用。從一側鏈接它在你的主.targets文件中。從另一個覆蓋它執行任務解決方案的目標AfterBuild
另一個「主」自定義任務。這個「主」任務將從新構建的程序集中獲取所有實現ITask
的類並將它們寫入.targets文件。
但說實話,這看起來像對我來說矯枉過正。你必須編輯你的.targets文件才能使用你的新任務。編寫這樣的「主」任務並支持它可能需要更多時間。
我可能會幻想更多的自動化解決方案,但考慮到「投入時間」/「自動化節省的時間」會阻止我的想象力飛行。 =)
我找到了一個使用PowerShell,程序集反射和XML的解決方案。我在項目的AfterBuild目標中運行PowerShell腳本,並按預期創建.Targets文件。這不會讓我成爲一個優雅的解決方案,儘管......對此有何想法或其他選擇? =) – 2010-11-23 16:43:20