bin和gac中的dll,哪一个被使用?

Joh*_*ker 68 asp.net deployment gac bin

我们有一个已部署到许多网站只用前端变化的Web应用程序,共享的后端部分都有它的GAC DLL,所以我们只需要更新一个DLL和所有的网站获取更新.

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

Ada*_*lls 79

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

如果您增加版本号,请重新引用引用新版本号的网站,将新版本放在/ bin目录中,然后将使用该DLL.

如果您不想更改版本号,那么您将非常幸运.

当.NET加载强命名程序集时,首先它会尝试确定要使用的版本号.它首先通过引用执行此操作,然后查找发布者策略,然后在配置文件中查找绑定重定向.

执行此操作后,它会在GAC中查找程序集,然后在指定的任何代码库中查找,然后它会探测DLL的各种文件系统文件夹.如果在任何一个步骤中找到正确的版本程序集,它就会停止.

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

  • 我理解正确吗?如果版本 1.0.0.0 在 GAC 中,但我使用版本 1.0.0.1 进行编译并将 1.0.0.1 放在我的 BIN 中,则 GAC 将被忽略并使用 BIN。如果我从我的 BIN 中删除 .dll,那么即使我用 1.0.0.1 编译,也会使用 GAC 中的 1.0.0.0? (2认同)
  • 否。如果您针对强命名程序集进行编译,它将需要确切的版本号,除非有可用的发布者策略或绑定重定向。 (2认同)
  • 发布者策略和绑定重定向允许版本 # 重定向,因此如果您的程序是针对 1.0.0.0 编译的,并且存在指定 1.0.0.1 的绑定重定向或发布者策略,那么它就会成为它查找的版本。 (2认同)
  • 一旦版本重定向完成,程序集加载器(融合)就会探测程序集的各个位置。如果找不到正确的版本,则会出现异常。 (2认同)

Iso*_*age 11

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

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

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

  • 你应该仔细检查你的dll是否已经签名.GAC优先于代码库和探测.一旦在GAC中找到签名版本,它就会停止.我用4.0测试了这个,MSDN文档是准确的,首先是BindingRedirect,然后是GAC,然后是CodeBase,然后是Probe for StrongName程序集 (6认同)