我在 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”应用程序池时消失了。
什么会产生奇怪的、随机的(我不得不说!)行为?还有更多的东西,比如散列,它用于比较程序集?
附录
- Perpetualcoder问我如何引用 DLL,如果有完整的限定名,我认为是,这里有一行 web.config:
装配="MyNamespace.MyComponent,版本=2.0.0.0,文化=中性,PublicKeyToken=1234567890ASDFGH"