我只是将现有项目复制到一台全新的机器上,以开始在该机器上进行开发,并且遇到了我所引用的程序集之一的版本问题(发生在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的异常: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问题,但这似乎与我的问题完全相反。该提问者的程序正在找到错误的DLL,而不是所引用的DLL。而我的问题是,该程序正在神秘地寻找错误的DLL,而无法在bin文件夹和GAC中本地找到正确的DLL时却找不到它。
我为什么要寻找旧版本?我还能在其他地方搜索找到此不良参考?