在我的上一个项目中,我们使用MSBuild作为脚本语言.(是的,真的!)我们还编写了数百个自定义MSBuild任务,用于在C#中更有意义的部分.(我甚至编写了一个MSBuild任务来为MSBuild任务生成样板代码.是的,它会自行消耗.)
虽然我不建议其他人采用相同的方法,但我发现非常有用的一件事是内置的依赖关系管理.正如您所期望的那样,表达依赖关系很容易,让MSBuild能够满足它们.例如,我们软件中的几乎每一步都要求将某组文件复制到某个位置.你可以轻松写:
Step1: CopyFiles Step2: CopyFiles, Step1
当你执行时Step2
,它只会复制一次文件.
构建和满足依赖树在软件中非常常见.我希望MSBuild团队能够获取他们的依赖管理代码,将其与MSBuild分离,并将其移至.NET Framework,任何人都可以使用它.Baring that,您认为以这种方式管理依赖项的最佳选择是什么?
我认为你可以使用像Spring这样的IOC容器来获得这种行为.
实例化任何只能作为单例运行一次并让任务对象的构造函数运行任务的任务.然后,随后依赖于该任务的任何对象将获得对已运行的任务的引用,并且能够获得该任务的结果或能够推断该任务已成功运行.
在spring配置中,您最终会将许多任务链接在一起,每个任务在其构造函数配置中引用其他任务.这种方法最灵活,您不仅限于"任务"或任何太重的事情.
我猜测任何工作流程库也有类似的概念.但我对这些并不熟悉.
我认为对于任何小的东西,人们必须使用访问者模式滚动他们自己的对象图和界面,并且可能是一个字典来保持状态.