{"未能加载文件或程序集"AssemblyName,PublicKeyToken = null"或它的某个依赖项。找到的程序集的清单定义与程序集引用不匹配。(HRESULT异常:0x80131040)":"程序集名称,公钥标记=空"}
我在尝试调试我的应用程序时,在签名了它正在使用的未签名的第三方程序集之后,收到了作为InnerException.Message
的问题消息。奇怪的是,我已经签名了消息中显示的程序集,而这个程序集无法加载。
这里会有什么问题?我该如何解决这个问题?
- 编辑**
编辑以提供更多关于我所做的事情的信息:
- 已签署项目引用的所有未签署的第三方程序集。
- 反汇编这些程序集以查看它们是否在内部引用任何外部未签名程序集(它们没有)
- 从项目的引用列表中删除了旧的未签名程序集,并重新添加了新签名的程序集。
- 通过添加程序集引用中缺少的PublicKeyToken,卸载项目并编辑无法加载到. sln XML样式文件中的程序集引用。
抛出异常的程序集,顺便说一句,项目构建得很好,这是一个运行时异常,我在该程序集的InitializeComponent()
上得到了它,它是一个带有WPF控件(MahApps.Metro)的开源组件。
如何强制WPF使用使用程序集强名称的资源URI?
5条答案
按热度按时间3j86kqsm1#
PublicKeyToken = null告诉你CLR正在寻找unsigned程序集。因为你对它们进行了签名,所以这不会很好地工作,这是意料之中的。
你必须 * 重新生成 * 程序,这样它才能使用更新后的签名程序集,并将非空的PublicKeyToken嵌入到清单中。你可能必须删除现有的程序集引用并将其添加回来,从你是否使用未签名的副本生成程序的问题中并不清楚。
如果仍有问题,请使用Fuslogvw.exe实用程序。
cdmah0mi2#
也许您的一个“未签名的第三方程序集”引用了另一个“未签名的第三方程序集”-因此在您对所有程序集进行签名后,该引用是错误的。
也许这个工具可以帮助您:https://github.com/brutaldev/StrongNameSigner-它可以更新程序集(它可能也可以通过使用命令行来完成,但我不知道怎么做)。
fdbelqdn3#
1.备份所有的生产dll和文件到另一个文件夹-以防万一回滚
1.将当前进程正在运行的所有生产dll复制到本地项目
1.在所有相关的本地项目上引用所有这些DLL。
1.再次编译并复制项目dlls以尝试启动窗口服务。
还没开始工作。
1.备份所有的生产dll和文件到另一个文件夹-以防万一回滚
1.从本地项目中复制所有新编译的dll,并将这些dll覆盖到生产文件夹中
1.启动窗口服务
vof42yt14#
我注意到你说你签署了第三方库,但是不要忘记也签署你自己的使用第三方库的程序集。最重要的是使用签名库的程序集。这就是我最近为自己修复这个问题的方法。
Visual studio有时过于宽容,允许我们逃避超出我们应该承担的责任。其他时候?就不那么多了。
请确保在进行更改后也清理项目。然后重新生成解决方案。希望这将使您更进一步。
des4xlb05#
通过将解决方案从远程驱动器移动到本地驱动器,我的问题得到了修复。