以编程方式生成自定义MSBuild .Targets文件

时间:2010-11-22 16:56:57

标签: msbuild msbuild-4.0

我有一个自定义MSBuild任务库,我会定期编辑,重构代码,添加新任务以及删除旧的,已解散的任务。编辑.Targets文件以与库中的实际内容同步变得很痛苦,所以我想知道,自动执行此操作的最佳方法是什么?

我想要一个在库成功构建之后运行的解决方案,以便在尝试从其他项目调用我的自定义任务时不会遇到任何令人讨厌的错误。

我对如何做到这一点有一些想法,但我想先看看别人想出的是什么。 : - )

2 个答案:

答案 0 :(得分:1)

您可能有一个单独的.targets文件,其中只包含对您的任务的引用。从一侧链接它在您的主.targets文件中。从另一个覆盖它在任务解决方案的AfterBuild目标中执行另一个“主”自定义任务。这个“主”任务将从新构建的程序集中获取所有实现ITask的类,并将它们写入.targets文件 但说实话,这对我来说太过分了。无论如何,您必须编辑.targets文件才能使用新任务。编写这样一个“主”任务并支持它可能会花费你更多时间。

我可能会幻想几种更自动化的解决方案,但考虑到“投入时间”/“由于自动化而节省的时间”会阻止我的想象力。 =)

答案 1 :(得分:0)

好吧,通过MSBuild Community TaskTaskSchema任务,我找到了一种更好的方法:

<TaskSchema Assemblies="@(MyTaskAssembly)" 
            OutputPath="%(MyTaskAssembly.RootDir)%(MyTaskAssembly.Directory)" 
            CreateTaskList="true"
            IgnoreMsBuildSchema="true"
            Includes="Microsoft.Build.Commontypes.xsd"/>

我只是确保已导入MSBuild.Community.Tasks.Targets文件,创建一个名为ItemGroup的{​​{1}}包含我的所有任务程序集(shocker),然后坚持上述任务调用在我项目的MyTaskAssembly目标中。甜! :)