.Net共享两个Web服务之间的dll

时间:2011-05-18 12:27:56

标签: c# iis components share

我有两个Web服务,它们都包含在一个公共子目录

下面
CompanyName\Service1
CompanyName\Service2

每个目录都有一个包含其dll的bin文件夹。我现在已经到了这样的程度,其中一些代码已经重组并且有相当多的常见组件,我希望能够“共享”它们。最好的方法是什么?以下是我找到的解决方案列表(以及否定数据)。

  • AssemblyResolving - 安全问题。
  • web.config中的
  • codeBase元素 - 组件位置的硬编码路径。
  • GAC - 目前我们的产品中没有使用GAC,而且我个人对使用它的知识非常有限。这可能只是对未知的恐惧。
  • 将程序集放置在两个位置 - 更难以更新就地补丁。需要确保文件在所有位置都被替换。

我错过了对我有帮助的任何其他内容吗?有人会建议使用上面列出的任何选项吗?

此外,我无法将这两项服务合并为第三方目前使用的服务(它们是单独构建的)。

5 个答案:

答案 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)

答案 4 :(得分:0)

另一种选择是将文件放在一个位置,并使用符号链接链接到它们。 This线程解释了该命令。

我没有尝试过的经验所以不推荐它。