【问题标题】:Assembly binding error - fusion log and dependency browser mismatch程序集绑定错误 - 融合日志和依赖浏览器不匹配
【发布时间】:2010-11-16 03:23:42
【问题描述】:

我正在追查最近弹出的程序集加载/绑定错误。在我的调查中,我发现了一个令人困惑的矛盾(假设我正确解析了融合日志)。

我的应用程序在启动时抛出的异常状态:

{“无法加载文件或程序集 '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”。在确认我的所有解决方案项目确实引用了未签名的程序集后,我启动了dependency browser 以确保我没有遗漏任何东西。一切都检查过了,我确认我没有对旧程序集的任何“旧”引用。当然,我也清理并重建了我的项目。

然后我进一步研究并启动了融合日志查看器 (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

日志:DisplayName = Microsoft.Practices.CompositeUI,版本=1.0.51205.0,文化=中性,PublicKeyToken=31bf3856ad364e35 (完全指定)

LOG: 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,Version=1.0.51205.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35

日志:GAC 查找失败。

LOG:正在尝试下载新的 URL file:///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:进入从源代码运行设置阶段。

LOG:程序集名称为:Microsoft.Practices.CompositeUI,版本=1.0.51205.0,Culture=neutral,PublicKeyToken=null

警告:比较程序集名称导致不匹配:PUBLIC KEY TOKEN

ERR:程序集引用与找到的程序集定义不匹配。

ERR:无法完成程序集设置 (hr = 0x80131040)。探测终止。

现在调用程序集“Microsoft.Practices.EnterpriseLibrary.Common”没有任何列出的(通过依赖项浏览器)对“Microsoft.Practices.CompositeUI”的依赖项。不仅如此,它也不应该有。

融合日志阻止了我,融合日志导致混乱! ;0)

希望我为一些明智的专家提供了足够的信息,让我知道我缺少什么。

【问题讨论】:

  • 您为什么不希望有对 Microsoft.Practices.CompositeUI 的强名称引用?您是否在没有 SNK 的情况下自己重新编译并更改了所有项目引用?
  • 另外,我认为您的 GAC 中没有 Microsoft.Practices.CompositeUI 的强命名副本?
  • @JeffN825 - “您是否在没有 SNK 的情况下自行重新编译并更改了所有项目引用?”是的,这正是我所做的。我还检查了 GAC (gacutil -l),没有列出任何 P&P 程序集。
  • EntLib Common 试图加载程序集并不意味着它正在引用它。考虑使用反射按名称解析类型的场景。完整的堆栈跟踪在这里可能会有所帮助。
  • 你有没有安装notepad++之类的?我建议搜索解决方案目录中所有文件的内容(包括 csproj 文件,这就是您需要使用外部程序的原因)以查找字符串“31bf3856ad364e35”。

标签: .net fusion


【解决方案1】:

我不确定答案是否合适或补充评论,如果我选择不正确,请原谅。 ;0)

好消息是重启后(实际上是断电)问题就消失了。我不知道这是如何或为什么解决了它,我在研究问题时非常细致,但果然重启让它消失了!

感谢 JeffN825 的坚持并提供帮助,我为您的一些 cmets 投了票。

【讨论】:

  • 有时我看到非常讨厌的 obj 目录(及其内容)即使在清理和重建之后仍然存在,直到我真正重新启动 VS,然后清理并重建......很高兴它已修复!跨度>
猜你喜欢
  • 2018-06-28
  • 2018-12-07
  • 2017-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-19
  • 2021-10-21
相关资源
最近更新 更多