把垃圾桶和空气罐都放进去,哪一个要用?

我们有一个网络应用程序,部署到许多网站,只有前端的变化,共享后端部分有它的 DLL 在 GAC,所以我们只需要更新一个 DLL 和所有的网站得到更新。

有没有办法在/bin 文件夹中使用 DLL 覆盖 GAC,在新特性发布之前测试它们?

56599 次浏览

如果它的版本号与引用的 DLL 相同,则使用 GAC。

如果增加版本号,引用新版本号重建网站,将新版本放在/bin 目录中,那么将使用该 DLL。

如果您不想更改版本号,那么您就很不走运了。

什么时候。NET 加载强命名程序集,首先尝试确定要使用的版本号。它首先通过引用执行此操作,然后查找 出版商政策,然后在配置文件中查找 绑定重定向绑定重定向

完成此操作后,它将在 GAC 中查找程序集,然后在任何 指定的代码基中查找程序集,然后探测各种文件系统文件夹以查找 DLL。如果在这些步骤中的任何一个步骤中找到正确的版本程序集,它将停止。

如果不更改强命名程序集的版本号,则。NET 会在 GAC 中找到原来的那个,然后停止查找。请注意,因为它在找到一个版本号时停止,并且因为首先查找 GAC,所以为程序集指定代码库没有任何好处,除非您还指定了一个新的版本号。

我想我的想法可能和亚当 · 西尔斯一样但为了我的理解重新措辞了一下。通过我自己的测试,看起来是这样的:

  • 如果您的应用程序是用版本1.0.0.0编译的,并且1.0.0.1在 GAC 中,那么您可以省略。从您的/bin 中删除 dll。
  • 如果您的应用程序是用版本1.0.0.1编译的,并且1.0.0.0在 GAC 中,那么您必须将。在/bin 中使用 dll 来忽略 GAC。如果 GAC 版本比应用程序的要求版本旧,则会发生错误,除非在/bin 中包含较新的版本。

我希望这是正确的..。

您可以使用组装绑定日志查看器(Fuslogvw.exe)查看日志文件中的绑定信息,该查看器包含在 Windows 软件开发工具包(SDK)中。

是的

我已经能够使用 <codebase>Element 用 bin 文件夹中的程序集覆盖 GAC。

通过在 web.config 文件中指定 <codebase version="1.2.3.4" href="/bin/MyAssembly.dll" />,我可以告诉我的应用程序使用这个版本,而不是 GAC 中指定的版本。

您可能还想看看指定装配位置的 <probing>Element?