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