我只是复制了一个现有的项目到一个全新的机器上开始开发,并遇到了一个问题与版本的一个参考程序集(一个 telerik DLL,因为它发生)。
该项目最初引用了程序集的旧版本(让我们称之为 v1.0.0.0)。我的新机器安装了最新版本的程序集,所以我想我已经更新了它(让我们调用新版本 v2.0.0.0)。
现在的问题是: 如果我将旧的 v1.0.0.0 dll 复制到项目文件夹并添加它作为参考,网站启动没有问题。如果我删除这个引用(同时也从我的系统中删除旧的 DLL)并添加新版本(v2.0.0.0) ,页面会显示以下异常:
无法加载文件或程序集 XXXXXX,版本 = 1.0.0.0, 文化 = 中立, PublicKeyToken = 121fae78165ba3d4’或 它的一个依赖项 程序集的清单定义 与程序集引用不匹配。 (来自 HRESULT T: 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.
它所说的一切都是从寻找那个古老的组合开始的。我曾试图在网上找到一个解决方案,并看到了类似的 有个问题,但它似乎是我的问题的完全相反。那个提问者的程序找到的是错误的 DLL 而不是引用的 DLL。然而我的问题是,程序神秘地寻找错误的 DLL,当正确的 DLL 可以在 bin 文件夹和 GAC 中本地找到时,却无法找到它。
为什么我的搜索引擎在寻找旧版本? 我还可以在哪里搜索找到这个错误的引用?