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

本文关键字:服务 Web 之间 共享 dll 两个 Net | 更新日期: 2023-09-27 17:56:42

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

CompanyName'Service1
CompanyName'Service2

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

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

是否遗漏了其他可能对我有帮助的东西?有人会推荐使用上面列出的任何选项吗?

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

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

我会选择GAC,因为IS解决了您列出的所有其他问题,此外,共享库位于一个位置看起来很自然。

要使用 GAC,您只需要它来对 DLL 进行强命名,并在安装时将其放入 GAC 中它还为您提供了良好的并行版本控制选项(一个WS使用版本1.0.0.0,另一个可以使用1.0.0.1)

您最好最好是几乎

可以肯定地同时更新这两个服务。如果这是您担心的事情,请查看您的部署过程。

另一个真正的选择是使用 GAC。GAC 带来了自己的问题,例如必须对程序集进行强命名/签名以及更多部署问题。

对于生成系统,如果始终同时生成和部署两个 Web 服务,则不必担心混合匹配,因为您指出程序集需要在服务之间保持不变。如果您没有使用 CI 系统,我建议您启动一个,TeamCity 是一个很好的入门系统,它是免费的(好吧,对于有限数量的用户/项目 - 足以让您入门)。然后,只需直接从 CI 或从那里生成的包进行部署即可。我承认CI对于解决一个问题有点需要解决,但从长远来看,它可以帮助您的生活更轻松。

这就是 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

两个位置。这样,您可以通过替换该 bin 文件夹中的文件来发布对一个版本中公共代码的更改(接口更改/中断性更改),而不会危及/破坏其他 Web 服务。

更新:这具有与使用 GAC 相同的"并行版本控制"优势,没有任何协调的发布复杂性、强大的命名要求等。

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

我没有尝试这个的经验,所以不推荐它。