在.NET中的解决方案之间共享通用库的最佳实践

我们有MSVS解决方案库(解决方案“A”,“B”,“C”,...),它们共享名为“Common.dll”的程序集中的基本功能。

有3-5个积极的解决方案(正在开发中),而另一些则是被动的,几乎没有重建。

Common.dll一直在开发中。 有几个选择如何保持我的解决方案代码,你会建议什么,为什么?

一个)。 将common.dll源代码放到每个解决方案中 。 优点:它可以帮助积极的解决方案与common.dll并行发展,而被动解决方案可以编译。 缺点:在活动解决方案之间很难同步活动common.dll代码

B)。 将common.dll二进制代码放到每个解决方案中 。 优点:所有项目都是可编译的,而common.dll代码将被集中。 缺点:与common.dll并行增长主动解决方案非常困难

C)。 引用每个项目以支持common.dll二进制文件看起来像B.但它会带来被动解决方案的问题,如果common.dll会增长并更改它的接口(有些人可能会说接口应该始终保持不变)

d)。 ?

先谢谢你!


我们练习的东西大多是像B.

CI服务器确保公共库始终是最新的(即使他们使用其他公用库本身)。 每个使用公共库的解决方案都有一个“Lib”文件夹,我们在其中放置构建工件,但这些文件不受源代码控制(与外部文物相比,例如通过NuGet导入的文物)。

因此,在开发时,由于突破常见库的变化,开发人员不会遇到问题,开发人员选择升级时的时间点(但在他进行中央回购前,他必须这样做)。

CI服务器将始终将最新的通用库复制到构建中的解决方案的“库”中,以便集成最新的通用库。 如果我们需要使用旧库(特定的修补程序版本 - 非常少见)创建构建版本,则始终可以使用具有匹配日期的构建文物。 正常的修补程序/修补程序版本通常也会升级到最新的通用库。


还有其他选项,还有:

D)将所有项目放在同一个SVN(或其他CVS)根目录中。

这允许分支和标记,同时确保每个项目都有一个共同的分支版本。 这样您可以根据需要简单地将项目包含在每个解决方案中。

当然,问题是所有的项目都在同一个SVN中。 :)

最好的是你一定要在你创建的每个分支中获得Common.dll的源代码的快照。

E)使用SVN Externals

如果您使用Subversion,则可以使用SVN Externals(将本地子文件夹映射到版本化资源的url)。 GIT也支持类似的东西,但如果您想要对外部回购提交更改,这有点复杂。


我会马上说折扣(A),因为你会杀死任何可维护性的功能!

实际上,这确实代表了这些代码库的变化频率。

对于我正在处理的类似设置,我们的解决方案是有一个单独的“Common”项目,并将二进制文件复制到每个引用Common的项目的“Libs”文件夹。 原因是我们有能力为每个项目部署common.dll的显式版本。 Libs文件夹通过TFS进行维护。 因此,虽然父项目不需要重新编译,但TFS将会看到新的签入并可以采取相应的行动。

我会考虑的另一个选择是按照此链接中的某个解决方案,参考“现场”常见项目。 但请注意,这会限制您引用不同版本通用的能力,除非您为每个物理版本创建单独的项目版本,而这又因可维护性而不太可能且不可取。

链接地址: http://www.djcxy.com/p/57167.html

上一篇: Best practice to share common libraries between solutions in .NET

下一篇: secret empty tree object reliable, and why is there not a symbolic name for it?