2

.net 中应该如此简单的东西似乎太难了。

我有一个名为 MyExtenders 的项目,其中包含一些基本类型的简单扩展程序。

许多项目使用 MyExtenders - 因此在传统的 svn 签出和构建方法中,我将 MyExtenders 添加为 svn:external,并将修订锁定到上次构建和测试的版本。

现在,如果我有两个项目都需要将 MyExtenders 添加到同一个解决方案中,那么这一切都会归为一堆。我不能将两个 MyExtenders 添加到解决方案中 - 所以我必须只使用一个 - 在不同修订的情况下意味着使用它重新测试旧项目。

一张图可能最好地解释了依赖关系:

SolutionA
->ProjectA
->->MyExtenders r350 (svn:externed by ProjectA)
->ProjectB
->->MyCryptography r800 (svn:externed by ProjectB)
->->->MyExtenders r800 (svn:externed by MyCryptography)

Delphi/C 可以很好地使用上述内容 - 所有引用都来自他们自己的项目文件夹。

VS 坚持丢失目录结构并将上面的内容扁平化为:

SolutionA
->ProjectA (refers MyExtenders)
->ProjectB (refers MyCryptography)
->MyCryptography r800 (refers MyExtenders)
->MyExtenders r350 || r800 - my choice

我被迫修改其中一个项目以引用不同的 MyExtenders,以及不同的修订版。

显然我做错了..但你怎么做对了?

4

1 回答 1

1

确实没有办法解决这个问题:如果您有两个不同的项目,取决于同一程序集的不同版本,那么无论您如何管理项目间的依赖关系,都必然会发生冲突。要了解这是为什么,请想象一下您的所有源冲突都可以通过某种方式解决 - 现在您在部署时会做什么?哪个程序集版本的依赖被加载?不管它是什么,它都可能会破坏需要其他版本的依赖程序集。

如果您的设计需要在各个子系统之间共享库,并且这些子系统位于同一进程中(好吧,从技术上讲,相同的 AppDomain),您需要为两者提供相同的程序集版本。

如果您可以获得由边界分隔的依赖程序集,例如服务接口或远程处理通道,则此问题就会消失。然后您可以独立地对依赖项进行版本控制。然而,Visual Studio 不喜欢在一个解决方案中拥有两个同名的项目,因此解决此问题的唯一方法是复制其中一个项目文件,重命名它,然后将其加载到解决方案中。

于 2010-07-03T06:10:55.630 回答