13

在我的上一个项目中,我们使用 MSBuild 作为脚本语言。(是的,真的!)我们还为在 C# 中更有意义的部分编写了数百个自定义 MSBuild 任务。(我什至编写了一个 MSBuild 任务来生成 MSBuild 任务的样板代码。是的,它消耗了自己。)

虽然我不建议其他人采用同样的方法,但我发现非常有用的一件事是内置的依赖管理。如您所料,表达依赖关系并让 MSBuild 负责满足它们很容易。例如,我们软件中的几乎每个步骤都需要将一组特定文件复制到特定位置。你可以很容易地写:

Step1: CopyFiles
Step2: CopyFiles, Step1

当你执行时Step2,它只会复制一次文件。

构建和满足依赖关系树在软件中很常见。我希望 MSBuild 团队能够使用他们的依赖管理代码,将其与 MSBuild 分离,并将其移至任何人都可以使用的 .NET Framework。除此之外,您认为以这种方式管理依赖关系的最佳选择是什么?

4

2 回答 2

5

我认为您可以使用像 Spring 这样的 IOC 容器来获得这种行为。

实例化任何只能作为单例运行一次的任务,并让任务对象的构造函数运行该任务。然后,以后出现的任何依赖于该任务的对象都将获得对已经运行的任务的引用,并能够获得该任务的结果或能够推断该任务已经成功运行。

在 spring 配置中,您最终会得到许多链接在一起的任务,每个任务都在其构造函数配置中引用其他任务。这种方法是最灵活的,你不限于“任务”或任何太重的事情。

我猜任何工作流库也有类似的概念。但我对这些并不是很熟悉。

我认为对于任何更小的东西,人们必须使用访问者模式和可能的字典来滚动他们自己的对象图和界面来保持状态。

于 2009-02-11T18:14:44.740 回答
1

查看 CodePlex 上的Refix项目。它代表 REference FIX,它工作得非常好。

于 2010-06-25T16:30:59.847 回答