在垃圾桶和GAC中,哪一个被使用?

我们有一个web应用程序部署到许多网站只有前端更改,共享后端部分有GAC中的DLL,所以我们只需要更新一个DLL,所有的网站获取更新。

有没有办法用/ bin文件夹中的DLL来覆盖GAC,以便在发布之前testing新function?

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

如果增加版本号,重build引用新版本号的网站,将新版本放在/ bin目录下,然后使用该DLL。

如果您不想更改版本号,那么您几乎不走运。

当.NET加载强有名的程序集时,首先会尝试确定要使用的版本号。 它首先通过引用完成此操作,然后查找发布者策略 ,然后在configuration文件中查找绑定redirect 。

之后,它会在GAC中查找程序集,然后在指定的任何代码库中查找该DLL的各种文件系统文件夹。 如果在其中任何一个步骤中find正确的版本程序集,则停止。

如果您没有更改强命名程序集的版本号,则.NET将在GAC中find原始版本,并停止查找。 请注意,因为它在find一个时停止,并且因为在GAC中查找第一个,所以为程序集指定代码库将无济于事,除非还指定了新的版本号。

我已经能够使用<codebase>元素在\ bin文件夹中用程序集覆盖GAC。

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

您可能还想查看指定assembly位置的<probing>元素?

我想我可能会像亚当·斯蒂尔一样思考,但是为了我的理解,我重新措辞。 通过我自己的testing,看起来是这样的:

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

我希望这是正确的…

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

小号