我有两个Web服务,它们都包含在一个公共子目录
下面CompanyName\Service1
CompanyName\Service2
每个目录都有一个包含其dll的bin文件夹。我现在已经到了这样的程度,其中一些代码已经重组并且有相当多的常见组件,我希望能够“共享”它们。最好的方法是什么?以下是我找到的解决方案列表(以及否定数据)。
我错过了对我有帮助的任何其他内容吗?有人会建议使用上面列出的任何选项吗?
此外,我无法将这两项服务合并为第三方目前使用的服务(它们是单独构建的)。
答案 0 :(得分:3)
我会选择GAC,因为它解决了您列出的所有其他问题, 加上看起来很自然,共享库将位于一个位置。
使用GAC,只需要强制命名dll,然后在安装时将其放入GAC 它还为您提供了良好的并排版本控制选项(一个WS使用版本1.0.0.0,另一个可以使用1.0.0.1)
答案 1 :(得分:2)
您最好的是几乎可以肯定地同时更新这两项服务。如果您担心这一点,请查看您的部署过程。
另一个真正的选择是使用GAC。 GAC带来了它自己的问题,例如必须对程序集进行强名称/签名以及更多部署问题。
关于构建系统,如果您始终同时构建和部署两个Web服务,那么您不必担心混合匹配,因为您指出程序集需要在服务之间保持不变。如果你没有使用CI系统,我建议你先启动一个,TeamCity是一个很好的开始,它是免费的(好吧,对于有限数量的用户/项目 - 足以让你入门) 。然后直接从CI部署,直接或从那里生成的包。我承认CI对解决一个问题有点解决,但如果从长远来看,它可以帮助你的生活更轻松。
答案 2 :(得分:1)
两个地点。这样,您可以通过替换该bin文件夹中的文件,在一个版本(界面更改/中断更改)中发布对公共代码的更改,而不会危及/破坏其他Web服务。
更新:这与使用GAC具有相同的“并排版本控制”优势,没有任何协调的发布复杂性,强大的命名要求等。
答案 3 :(得分:1)
这就是GAC的目标。
如果要协调共享代码,也可以执行私有NuGet提要。
http://haacked.com/archive/2010/10/21/hosting-your-own-local-and-remote-nupack-feeds.aspx
http://haacked.com/archive/2011/01/15/building-a-self-updating-site-using-nuget.aspx
答案 4 :(得分:0)
另一种选择是将文件放在一个位置,并使用符号链接链接到它们。 This线程解释了该命令。
我没有尝试过的经验所以不推荐它。