在我的上一个项目中,我们使用 MSBuild 作为脚本语言。(是的,真的!)我们还编写了数百个自定义的 MSBuild 任务,用于那些更适合在 C# 中实现的部分。(我甚至编写了一个 MSBuild 任务来生成 MSBuild 任务的样板代码。是的,它消耗了它自己。)
虽然我不建议其他人采取同样的方法,但我发现其中一个非常有用的功能是内置的依赖关系管理。正如您所期望的那样,很容易表达依赖关系并让 MSBuild 负责满足它们。例如,我们软件中几乎每一步都需要将某个特定集合的文件复制到特定位置。你可以轻松地编写:
虽然我不建议其他人采取同样的方法,但我发现其中一个非常有用的功能是内置的依赖关系管理。正如您所期望的那样,很容易表达依赖关系并让 MSBuild 负责满足它们。例如,我们软件中几乎每一步都需要将某个特定集合的文件复制到特定位置。你可以轻松地编写:
Step1: CopyFiles
Step2: CopyFiles, Step1
执行Step2
时,它只会复制文件一次。
在软件中构建和满足依赖关系树是相当普遍的。我希望MSBuild团队能够将其依赖关系管理代码从MSBuild中分离出来,并将其移入到.NET Framework中,以便任何人都可以使用它。如果无法实现,您认为以这种方式管理依赖关系的最佳选项是什么?