我正在追查最近弹出的程序集加载/绑定错误。在我的调查中,我发现了一个令人困惑的矛盾(假设我正确解析了融合日志)。
我的应用程序在启动时抛出的异常状态:
{“无法加载文件或程序集 'Microsoft.Practices.CompositeUI, Version=1.0.51205.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' 或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。(来自异常HRESULT: 0x80131040)":"Microsoft.Practices.CompositeUI,版本=1.0.51205.0,文化=中性,PublicKeyToken=31bf3856ad364e35"}
我最近所做的一些项目更改不应该需要强命名程序集“Microsoft.Practices.CompositeUI”。在确认我所有的解决方案项目确实引用了未签名的程序集之后,我启动了一个依赖浏览器以确保我没有遗漏任何东西。一切都检查过了,我确认我没有对旧程序集的任何“旧”引用。当然,我也清理并重建了我的项目。
然后我进一步研究并启动了融合日志查看器 (Fuslogvw.exe) 并将其配置为显示绑定错误。我查看了日志,发现绑定错误。详细日志是混乱开始的地方;它将“调用程序集”列为对缺少的程序集没有绑定(我可以确定)的程序集。啊,很难解释。这是日志:
*组装活页夹日志条目(11/15/2010 @ 7:00:18 PM)*
操作失败。
绑定结果:hr = 0x80131040。没有可用的描述。
从以下位置加载的程序集管理器:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll 在可执行文件 C:\Program Files\PMT\Office App\1.1.1.7\OfficeApp.exe 下运行
--- 详细的错误日志如下。
=== 预绑定状态信息 ===
日志:用户 = PMD\sklett
LOG:DisplayName = Microsoft.Practices.CompositeUI,Version=1.0.51205.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35(完全指定)
日志:Appbase = file:///C:/Program Files/PMT/Office App/1.1.1.7/
日志:初始 PrivatePath = NULL
日志:动态基础 = NULL
日志:缓存基础 = NULL
日志:AppName = OfficeApp.exe
调用程序集:Microsoft.Practices.EnterpriseLibrary.Common,Version=4.1.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35。
===
LOG:此绑定在默认加载上下文中开始。
LOG:使用应用程序配置文件:C:\Program Files\PMT\Office App\1.1.1.7\OfficeApp.exe.config
LOG:使用 C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\config\machine.config 中的机器配置文件。
日志:政策后参考:Microsoft.Practices.CompositeUI,版本=1.0.51205.0,文化=中性,PublicKeyToken=31bf3856ad364e35
日志:GAC 查找不成功。
日志:正在尝试下载新的 URL 文件:///C:/Program Files/PMT/Office App/1.1.1.7/Microsoft.Practices.CompositeUI.DLL。
LOG:程序集下载成功。尝试设置文件:C:\Program Files\PMT\Office App\1.1.1.7\Microsoft.Practices.CompositeUI.dll
LOG:进入从源代码运行设置阶段。
日志:程序集名称为:Microsoft.Practices.CompositeUI,版本=1.0.51205.0,文化=中性,PublicKeyToken=null
警告:比较程序集名称导致不匹配:PUBLIC KEY TOKEN
ERR:程序集引用与找到的程序集定义不匹配。
ERR:无法完成程序集的设置(hr = 0x80131040)。探测终止。
现在调用程序集“Microsoft.Practices.EnterpriseLibrary.Common”没有任何列出的(通过依赖项浏览器)对“Microsoft.Practices.CompositeUI”的依赖项。不仅如此,而且应该没有。
融合日志阻止了我的前进,融合日志导致了混乱!;0)
希望我为一些明智的专家提供了足够的信息,让我了解我所缺少的东西。