.NET DLL依赖于同一文件

时间:2011-04-08 21:21:05

标签: c# .net .net-assembly

我升级了我们的一个网站,并因此错误而受到欢迎:

=== Pre-bind state information ===
LOG: User = NT AUTHORITY\NETWORK SERVICE
LOG: DisplayName = <assembly>, Version=2.0.42.64, Culture=neutral, PublicKeyToken=c445f6f924945bd1
(Fully-specified)
LOG: Appbase = file:///E:/Web/
LOG: Initial PrivatePath = E:\Web\bin
Calling assembly : <assembly>, Version=2.0.42.67, Culture=neutral, PublicKeyToken=c445f6f924945bd1.
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: E:\Web\web.config
LOG: Using host configuration file: C:\Windows\Microsoft.NET\Framework\v2.0.50727\Aspnet.config
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v2.0.50727\config\machine.config.
LOG: Post-policy reference: <assembly>, Version=2.0.42.64, Culture=neutral, PublicKeyToken=c445f6f924945bd1
LOG: Attempting download of new URL file:///C:/Windows/Microsoft.NET/Framework/v2.0.50727/Temporary ASP.NET Files/root/5ee48cb7/31fcfc81/<assembly>.DLL.
LOG: Attempting download of new URL file:///C:/Windows/Microsoft.NET/Framework/v2.0.50727/Temporary ASP.NET Files/root/5ee48cb7/31fcfc81/<assembly>/<assembly>.DLL.
LOG: Attempting download of new URL file:///E:/Web/bin/<assembly>.DLL.
WRN: Comparing the assembly name resulted in the mismatch: Revision Number
ERR: Failed to complete setup of assembly (hr = 0x80131040). Probing terminated.

其中<assembly>是汇编的名称。

如果我正确读取了汇编(.67)正在尝试加载自己,但是之前的(.64)并且失败了,因为显然文件不能有2个版本......

什么可能导致这个问题? 是我的配置还是程序集的编译是错误的?

2 个答案:

答案 0 :(得分:1)

我现在找到了错误消息的原因并在此处发布,因此可能对其他人有所帮助。

有两个具有循环依赖关系的程序集,其中一个没有严格的修订检查:

a1(.67) -> a2(.11) -> a1(.64)

其中a1a2是程序集名称,括号中的数字是修订版本。

所以真正发生的是第一个程序集正在加载旧程序集,而旧程序集又会尝试加载程序集的旧版本。然后,错误消息将告诉您a1(.67)尝试加载a1(.64),并跳过整个加载程序集链。

要帮助调试此a1,应严格执行应加载的a2版本。然后,错误消息将告诉您a2已过时。

答案 1 :(得分:0)

当我在缓存或会话中有对象时,我已经看过一两次了,我已经构建了一个新版本的程序集,只是在应用程序仍在运行时将其复制到原始版本上。解决方法是重新启动ASP.NET应用程序,并删除Temporary ASP.NET Files。