我有一个自定义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