2

我在 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"

4

2 回答 2

0

I keep repeating myself: don't store files in the GAC unless you absolutely have to. asp.net copies dlls to a temp folder and runs the site from there, it might be checksums mismatch between the loaded dll and the one in the tempfolder.

You should keep your site's dlls local to the sites, in their bin folder. It will give you more flexibility and you don't hurt application B by updating a dll for application A. you also get xcopy deployment for the low price of giving up a bit of diskspace.

于 2008-12-19T08:27:15.183 回答
0

Frans,这是一个我理解的过程,它当然可以作为一种部署方式,但我不明白的是为什么即使完整的限定名称是正确的,但仍然会出现错误。我在 DLL 清单中看到,有哈希算法规范。ASP.NET 是否对 DLL 执行散列比较?

我的意思是:IIS/ASP.NET 发现 DDL“A”与 DLL“B”哈希不匹配,但三元组“key,culture,version”是相同的,所以为什么它不只是更新而是弹出出 web.config 错误?

于 2008-12-19T10:24:35.243 回答