【发布时间】:2008-12-18 23:24:00
【问题描述】:
我在 IIS 6 和 Windows Server 2003 上拥有多个 ASP.NET 2.0 网站。 每个站点都引用了一些 DLL:设计、逻辑等。 每个站点都位于不同的 ApplicationPool 上,具有关于回收技术的默认配置。
每个 DLL 都是强命名的(没有延迟),并且有一个永不改变的版本 (2.0.0.0),所有 DLL 都放在 GAC 中。
在我更新 GAC 中的 DLL(即 MyLibrary.dll)后,该 DLL 在某些内容(方法、类..)中发生了变化,以便在网站“A”中使用,并且仅在回收“A”应用程序池之后,当我尝试访问引用相同 DLL 的网站“B”时,我得到了关于该 DLL 的常见错误:
找到的程序集的清单 定义与程序集不匹配 参考。 (HRESULT 的例外情况: 0x80131040)
当然,除了代码、相同的强键、相同的版本、文化之外,DLL 没有任何变化。当然,在回收“B”应用程序池时错误消失了。
什么会产生奇怪的RANDOM(我不得不说!)行为?还有更多的东西,比如散列,可以用来比较程序集?
附录
- Perpetualcoder问我DLL是怎么引用的,如果是全名,我想是,这里有一行web.config:
assembly="MyNamespace.MyComponent, 版本=2.0.0.0,文化=中性, PublicKeyToken=1234567890ASDFGH"
【问题讨论】:
-
您的配置文件是否使用程序集的完全限定名称??
-
是的,实际上我是这样做的,命名空间、版本、文化、密钥。我已添加有关问题的信息,谢谢。
-
我看到了同样的问题,但我可以通过从 assembly/GAC_MSIL 文件夹复制程序集并使用 GACUTIL /i 重新安装它来触发它
标签: asp.net iis-6 assemblies reference manifest