HRESULT异常:0x80131047

33
每当我尝试调试我的项目时,都会出现这个问题:

Visual Studio error dialog

这是法语,以下是我的翻译:

"尝试运行项目时出错:无法加载程序集“DBZ buu's Fury Text Editor”或其依赖项之一。给定的程序集名称或代码库无效。(来自HRESULT的异常:0x80131047)"

请问有人能帮忙解决吗?
7个回答

61
如果你正在使用 Assembly.Load() 来加载文件,请尝试改用 Assembly.LoadFile()

2
可行但真的很老的错误,对于替代解决方案给个赞,谢谢。 - Omarrrio
@PaulMcCarthy Assembly.Load应该可以工作,但由于长的程序集名称(即“SampleAssembly,Version=1.0.2004.0,Culture=neutral,PublicKeyToken=8744b20f8da049e3”,请参见https://learn.microsoft.com/en-us/dotnet/api/system.reflection.assembly.load?view=netframework-4.8#System_Reflection_Assembly_Load_System_String_),而非文件名,所以错误消息正是指出程序集名称无效。 - yoel halb
1
因此,消息应该是“需要长的程序集名称”,并附带指向文档的链接。当前的消息完全具有误导性。 - Paul McCarthy

24

项目 > 项目属性 > 名称 > 删除名称中的撇号 ("'"),就可以正常工作。


11

这可能与我的情况无关...

首先,我想说这是一个非常难以排查的问题,因为有许多变量会导致与程序集相关的实际问题。

所以,我正在为针对Office 32位版本的Outlook Add-In 2010工作。一切都很顺利,直到有一天,插件突然无法加载,并显示错误“HRESULT: 0x80131047”。搜索了近半天后,我找到了一篇不错的文章:

http://blogs.msdn.com/b/astebner/archive/2007/05/06/2457576.aspx

我试图将程序集添加到全局缓存中,但未能成功。幸运的是,我有一个几乎相同的项目,它运行良好,我已经进行了比较检查,一切似乎都相同,但在这个过程中,我发现了一些不同之处...原来目标CPU平台设置为64位,于是我将其更改为“任意”,问题就解决了!


更改为“任何”就像魔法一样奏效。只需确保所有目标CPU下拉菜单都设置为全部即可。我发现有一个(两个中的一个)藏在“构建”窗口中,我一直忽略它。 - user8597
将目标 CPU 从 64 位更改为任何 CPU,解决了我的 PowerPoint VSTO AddIn 的问题。非常感谢! - Mike Meinz
@MikeMeinz 我很高兴能帮上忙!:) 这是一个棘手的问题,因为错误代码非常模糊/通用。 - Leo Gurdian

5
我有一个无效的 .\Properties\licences.licx 文件导致了这个问题。这个文件是由DevExpress组件自动生成的。我只需删除这个文件,就可以顺利构建了。

2

如果有其他人看到这篇文章并确定他们的命名约定是正确的,并且他们正在使用LoadFile方法...

这是我想出来的解决方案:

byte[] data = System.IO.File.ReadAllBytes(filename);
Assembly assembly = Assembly.Load(data);

在我看来,最好的答案是,我会通过查看代码签名证书来测试文件是否“有效”,否则程序可能很容易被利用。也许更新答案并使用X509Certificate.CreateFromSignedFile。 - Walter Verhoeven

2
这篇MSDN论坛帖子指出,您需要从程序集名称中去掉“特殊”字符,如斜杠、逗号或撇号,以避免出现该错误。
如果这样做没有解决问题,那么该帖子中的另一个建议是在调试选项卡中取消勾选“启用Visual Studio宿主进程”。

我的.NET Core Web API出了问题,原来是一个撇号的问题。我用没有撇号的名称启动了一个新项目,现在起始应用程序可以运行了。 :-) - Super Jade

2

我有一个无效的App.Config文件导致了这个问题。

不知怎么的,我缺少了主要元素的最终闭合标签。

</Configuration>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接