无法加载文件或程序集“AssemblyName PublicKeyToken = null”或其依赖项之一

时间:2014-01-29 15:19:54

标签: .net manifest il strongname disassembly

  

{“无法加载文件或程序集'AssemblyName,PublicKeyToken = null'或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。(HRESULT的异常:0x80131040)”:“AssemblyName,PublicKeyToken =空“}

我正在尝试在签署正在使用的未签名第三方程序集后调试我的应用程序时收到有问题的消息InnerException.Message。 奇怪的是,我已经签署了消息中显示的程序集,即无法加载的程序集。

这可能是什么问题?我该如何解决这个问题?

修改

编辑以提供有关我所做的更多信息:

  • 签署了我的项目引用的所有未签名的第三方程序集。
  • 反汇编这些程序集以查看它们是否在内部引用任何外部未签名程序集(它们没有)
  • 从项目的参考列表中删除旧的未签名的程序集,并重新添加新签名的程序集。
  • 通过添加程序集引用中缺少的PublicKeyToken,卸载项目并编辑无法加载到.sln XML样式文件中的程序集的引用。

抛出异常的程序集,顺便说一下,项目构建正常,这是我在该程序集InitializeComponent()上运行的运行时异常,是一个带有WPF控件的开源组件(MahApps.Metro)。我发现了一个类似的问题,但没有一个答案解决了这个问题。

How to force WPF to use resource URIs that use assembly strong name? Argh!

3 个答案:

答案 0 :(得分:24)

PublicKeyToken = null告诉您CLR正在寻找 unsigned 程序集。既然你签了他们,那就行不通了,这个kaboom是预料之中的。

您必须重建程序,以便它使用更新的已签名程序集并将非null的PublicKeyToken嵌入到清单中。您可能必须删除现有的程序集引用并将其添加回来,问题是否使用未签名的副本构建程序并不清楚。

如果仍有问题,请使用Fuslogvw.exe实用程序。

答案 1 :(得分:0)

  1. 将所有生产dll和文件备份到另一个文件夹 - 以防万一回滚
  2. 将当前进程正在运行的所有生产dll复制到本地项目
  3. 在所有相关的本地项目中引用所有这些dll。
  4. 再次编译并复制项目dll以尝试启动窗口服务。
  5. 还没有工作。

    1. 将所有生产dll和文件备份到另一个文件夹 - 以防万一回滚
    2. 从本地项目复制所有新编译的dll并将dll覆盖到生产文件夹
    3. 启动窗口服务

答案 2 :(得分:0)

我注意到你确实说你签了第三方图书馆,但也不要忘记签署你自己的使用第三方图书馆的程序集。最重要的是使用签名库的程序集。这就是我最近为自己解决这个问题的方法。

视觉工作室有时过于宽容,让我们能够超越自己的需要。其他时间?没那么多。

确保在进行更改后清理项目。然后重建解决方案。希望这会让你更进一步。