项目最初引用了旧版本的程序集(我们称其为 v1.0.0.0)。我的新机器安装了程序集的最新版本,因此我认为我已经更新了它(我们称新版本为v2.0.0.0)。
现在的问题是:如果我将旧的 v1.0.0.0 dll 复制到项目文件夹并将其作为参考添加,那么网站就可以正常启动。但是,如果我删除该引用(并从系统中删除旧的 DLL),并添加新版本(v2.0.0.0),则页面会显示以下异常:
“无法加载文件或程序集“XXXXXX, Version=1.0.0.0, Culture=neutral, PublicKeyToken=121fae78165ba3d4”或它的某个依赖项。找到的程序集清单定义与程序集引用不匹配。(HRESULT 异常: 0x80131040)”
显然,代码正在寻找过时的版本并找不到它。但是为什么呢?
我在解决方案文件夹中搜索了该版本号,但没有找到任何引用。我仔细检查了 .csproj 文件的文本,发现版本正确显示为最新版本,而 HintPath 正确显示了新 DLL 的路径。此外,由于我没有在系统上安装旧 DLL,因此它不会出现在我的 GAC 中(尽管 v2.0.0.0 会出现,正如预期的那样)。
然后,我启用了 FUSLOGVW.exe 尝试弄清楚为什么它正在寻找该旧版本,但没有成功:
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,并且无法找到正确的DLL,尽管正确的DLL可以在bin文件夹和GAC中找到。
为什么我的程序会寻找旧版本?我在哪里可以搜索以找到这个错误的引用?
<dependentAssembly>
条目导致了问题。 - Roy Tinker