gpt4 book ai didi

asp.net - .Net 选择错误引用的程序集版本

转载 作者:行者123 更新时间:2023-12-03 04:26:53 25 4
gpt4 key购买 nike

我刚刚将一个现有项目复制到一台全新的机器上开始在其上进行开发,但我引用的一个程序集(碰巧是 telerik DLL)的版本遇到了问题。

该项目最初引用了旧版本的程序集(我们称之为 v1.0.0.0)。我的新机器安装了最新版本的程序集,所以我想我已经更新了它(我们将新版本称为 v2.0.0.0)。

现在问题是:如果我将旧的 v1.0.0.0 dll 复制到项目文件夹并将其添加为引用,则网站启动时不会出现问题。如果我删除该引用(并从系统中删除旧的 DLL)并添加新版本 (v2.0.0.0),页面将显示以下异常:

Could not load file or assembly 'XXXXXX, Version=1.0.0.0, Culture=neutral, PublicKeyToken=121fae78165ba3d4' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

显然,代码正在寻找过时的版本,但找不到。但为什么呢?

我在解决方案文件夹中查找了该版本号,但找不到任何引用。我仔细检查了 .csproj 文件的文本,发现版本正确显示了最新版本,并且 HintPath 正确显示了新 DLL 的路径。此外,因为我没有在系统上安装旧的 DLL,所以它不会出现在我的 GAC 中(尽管 v2.0.0.0 会出现,正如预期的那样)。

然后我启用了融合日志查看器来尝试找出它为什么要查找旧版本,但没有成功:

Assembly Load Trace: The following information can be helpful to determine why the assembly 'XXXXXX, Version=1.0.0.0, Culture=neutral, PublicKeyToken=121fae78165ba3d4' could not be loaded.


=== Pre-bind state information ===
LOG: User = MyComp\me
LOG: DisplayName = XXXXXX, Version=1.0.0.0, Culture=neutral, PublicKeyToken=121fae78165ba3d4
(Fully-specified)
LOG: Appbase = file:///d:/My Documents/Visual Studio 2010/Projects/CoolProj/WebApp/
LOG: Initial PrivatePath = d:\My Documents\Visual Studio 2010\Projects\CoolProj\WebApp\bin
Calling assembly : WebApp, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null.
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: d:\My Documents\Visual Studio 2010\Projects\CoolProj\WebApp\web.config
LOG: Using host configuration file:
LOG: Using machine configuration file from C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\config\machine.config.
LOG: Post-policy reference: XXXXXX, Version=1.0.0.0, Culture=neutral, PublicKeyToken=121fae78165ba3d4
LOG: Attempting download of new URL file:///C:/WINDOWS/Microsoft.NET/Framework/v4.0.30319/Temporary ASP.NET Files/root/90233b18/10d54998/XXXXXX.DLL.
LOG: Attempting download of new URL file:///C:/WINDOWS/Microsoft.NET/Framework/v4.0.30319/Temporary ASP.NET Files/root/90233b18/10d54998/XXXXXX/XXXXXX.DLL.
LOG: Attempting download of new URL file:///d:/My Documents/Visual Studio 2010/Projects/CoolProj/WebApp/bin/XXXXXX.DLL.
WRN: Comparing the assembly name resulted in the mismatch: Major Version
ERR: Failed to complete setup of assembly (hr = 0x80131040). Probing terminated.

它说的是它从寻找旧程序集开始。我试图在网上找到解决方案,并看到类似的SO question ,但这似乎与我的问题完全相反。提问者的程序找到了错误的 DLL,而不是引用的 DLL。而我的问题是,程序神秘地寻找错误的 DLL,并且当可以在本地 bin 文件夹和 GAC 中找到正确的 DLL 时却无法找到它。

为什么我的要寻找旧版本?我还可以在哪里搜索来找到这个错误的引用?

最佳答案

我的猜测是您正在使用的另一个程序集正在引用旧的 dll。您是否熟悉正在使用的所有其他项目引用,并且其中是否有对 Telerik dll 的引用?

您可以像这样在 web.config 文件中添加绑定(bind)重定向吗?

<dependentAssembly>
<assemblyIdentity name="Telerik" publicKeyToken="121fae78165ba3d4"/>
<bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0"/>
</dependentAssembly>

关于asp.net - .Net 选择错误引用的程序集版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4187907/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com