我有一个自定义 MSBuild 任务库,我经常对其进行编辑、重构代码、添加新任务和删除旧的、已失效的任务。编辑 .Targets 文件以与库中的实际内容同步变得很痛苦,所以我想知道,自动化此操作的最佳方法是什么?
我想要一个在库成功构建后运行的解决方案,以便在尝试从其他项目调用我的自定义任务时不会遇到任何令人讨厌的错误。
我确实有一些关于如何做到这一点的想法,但我想先看看其他人的想法。:-)
我有一个自定义 MSBuild 任务库,我经常对其进行编辑、重构代码、添加新任务和删除旧的、已失效的任务。编辑 .Targets 文件以与库中的实际内容同步变得很痛苦,所以我想知道,自动化此操作的最佳方法是什么?
我想要一个在库成功构建后运行的解决方案,以便在尝试从其他项目调用我的自定义任务时不会遇到任何令人讨厌的错误。
我确实有一些关于如何做到这一点的想法,但我想先看看其他人的想法。:-)
您可能有一个单独的 .targets 文件,其中仅包含对您的任务的引用。从一侧将其链接到您的主 .targets 文件中。从另一个覆盖它AfterBuild
在任务解决方案的目标中执行另一个“主”自定义任务。这个“主”任务ITask
将从新建的程序集中获取所有实现的类,并将它们写入 .targets 文件。
但老实说,这对我来说似乎有点矫枉过正。无论如何,您都必须编辑 .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 文件,创建了一个包含我所有任务程序集(shocker)的ItemGroup
命名MyTaskAssembly
,然后将上述任务调用粘贴到AfterBuild
我的项目目标中。甜的!:)