. net DLL依赖于同一文件

本文关键字:文件 依赖于 DLL net | 更新日期: 2023-09-27 17:49:24

我升级了我们的一个网站,出现了这个错误:

=== 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个版本…

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

. net DLL依赖于同一文件

我现在已经找到了错误消息的原因,并将其发布在这里,以便它可能对其他人有所帮助。

有两个循环依赖的程序集,其中一个没有严格的版本检查:

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

其中a1a2为装配体名称,括号内的数字为修订版本。

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

为了帮助调试,a1应该严格规定应该加载a2的哪个版本。然后错误消息将告诉您a2是旧的。

当我在缓存或会话中有对象时,我已经看到过一两次这种情况,并且我已经构建了一个新版本的程序集,并在应用程序仍在运行时将其复制到原始版本上。修复方法是重新启动ASP。. NET应用程序,并删除临时ASP. NET。网络文件。