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

以编程方式生成自定义MSBuild.Targets文件,msbuild,msbuild-4.0,Msbuild,Msbuild 4.0,我有一个自定义MSBuild任务库,我定期编辑这些任务,重构代码,添加新任务,删除旧的、失效的任务。编辑.Targets文件以与库中的实际内容同步是一件很痛苦的事情,所以我想知道,自动化该文件的最佳方法是什么 我想要一个在库成功构建之后运行的解决方案,这样在尝试从其他项目调用自定义任务时就不会出现任何严重错误 关于如何做到这一点,我确实有一些想法,但我想先看看其他人有什么想法。:-) 您可能有一个单独的.targets文件,其中只包含对任务的引用。从一侧将其链接到主.targets文件中。在任务

我有一个自定义MSBuild任务库,我定期编辑这些任务,重构代码,添加新任务,删除旧的、失效的任务。编辑.Targets文件以与库中的实际内容同步是一件很痛苦的事情,所以我想知道,自动化该文件的最佳方法是什么

我想要一个在库成功构建之后运行的解决方案,这样在尝试从其他项目调用自定义任务时就不会出现任何严重错误


关于如何做到这一点,我确实有一些想法,但我想先看看其他人有什么想法。:-)

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


我可能会幻想一些更自动化的解决方案,但“投入的时间”/“自动化节省的时间”的考虑阻止了我的想象力的飞翔

好吧,我找到了一个更好的方法来实现这一点,方法是使用的
TaskSchema
task:



我只需确保导入了MSBuild.Community.Tasks.Targets文件,创建一个名为
mytasksassembly
ItemGroup
包含所有任务程序集(shocker),然后将上述任务调用粘贴到项目的
AfterBuild
目标中。好极了!:)

我发现了一个使用PowerShell、程序集反射和XML的解决方案。我在项目的后构建目标中运行PowerShell脚本,并按预期创建.Targets文件。不过,我觉得这不是一个优雅的解决方案。。。对此有何想法,或其他选择?=)您可以在任何开发人员都可以访问的(网络)路径中移动使用Powershell和反射创建的.Targets。然后,在项目构建脚本中,您总是引用“master”.Targets文件。至于使用Powershell和reflection,这对我来说并不是不雅的。您也可以使用xml注释而不是反射,但这需要更多的工作。