无法加载文件或程序集...尝试加载格式不正确的程序(System.BadImageFormatException)

528
我有两个项目,分别为ProjectAProjectB。其中,ProjectB是一个控制台应用程序,依赖于ProjectA。昨天所有一切都还好好的,但今天当我运行ProjectB时,出现了以下错误信息:BadImageFormatException was unhandled:
Could not load file or assembly 'ProjectA, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. An attempt was made to load a program with an incorrect format。

这两个项目都是普通的.NET项目,没有依赖于任何非.NET项目。它们都是纯粹的.NET项目,没有本地代码或P/Invoke调用。我还有其他依赖于ProjectA的项目,它们仍然能够正常工作。
我已经尝试过以下几种方法:
- 确保两个项目都设置为“Any CPU”,并且勾选了构建复选框。 - 确保两个项目均针对相同的目标框架(.NET 4.0 Client Profile)。 - 在ProjectB --> References --> ProjectA --> Properties中,确保“Copy Local”设置为“True”_(我验证了ProjectA.dll被正确地复制)_ - 清理/重新生成解决方案。我甚至尝试手动删除两个项目中的/bin和/obj文件夹。 - 重启Visual Studio。重启我的电脑。 - 检出存储库的全新副本。
但我仍然收到相同的错误消息。我不知道我做了什么导致了这个问题,也不知道该如何修复。有什么建议吗?

4
如果您在代码库中有版本历史记录,可以检查一下csproj文件是否有差异。 - Steve
1
@Steve:根据Mercurial的记录,除了添加新的.cs文件的引用之外,没有其他更改。 - BlueRaja - Danny Pflughoeft
1
你在另一台机器上是否遇到了相同的问题?机器上是否有其他变化(例如Windows更新、依赖项更新等)? - Mike Parkhill
1
你试过还原那些新的.cs文件了吗? - Mike Parkhill
3
这对我有用…… https://dev59.com/PGox5IYBdhLWcg3wIQ1o#9419522 - Som
显示剩余3条评论
32个回答

1

1

糟糕!我知道这个问题。我以为一切都做得很对,直到意外在VS输出窗口看到了“x86”,这时我才找到了原因。今天浪费了几分钟。

“发布”窗口下的配置设置为“x86”;而其他地方则是“x64”。

请确保在配置管理器、发布设置、解决方案配置和IIS设置(如果是您的Web服务器)之间保持同步。

此外,请记住 - VS是32位应用程序,而IIS是64位。在IIS中,默认禁用32位应用程序。

enter image description here


1
配置管理器显示所有项目设置为配置 - 调试,平台 x86。

enter image description here

问题项目的项目文件在Configuration|Platform Debug|x86中设置了PlatformTarget x64。在项目文件中更改PlatformTarget解决了问题。

enter image description here


0

可能有点好笑,但我曾经遇到过同样的问题,即使代码本来是可以正常工作的。我添加了StreamWriter和StreamReader,结果出现了错误。 解决方法是将该代码放入注释括号中,然后进行调试,这样它就又可以正常工作了。


0

我曾经遇到过同样的问题。在我的情况下,项目B是一个.Net Core类库,其中安装了Nuget“Microsoft.Management.Infrastructure”。错误是我将我的项目B命名为“MI”。我将项目名称更改为其他名称,突然间一切都正常了。


0

在我的情况下,抛出此异常的dll文件缺少了一个依赖项。我使用Dependency Walker进行检查,添加了缺失的dll文件后问题得到解决。

更具体地说,我不小心为 opencv_core340.dll 文件添加了SVN关键字,以至于我的dll文件无法再使用它。但是,我认为解决这个问题并不取决于dll文件是否损坏或丢失。我只是为了提供完整的信息而加入这条说明。


0
有趣的是,如果文件夹路径很长,这也可能发生,这可能会导致构建问题,奇怪的是带有这个神秘的错误消息。
将文件夹上移,问题得到解决!

0

如果您像我一样通过cli .net集成从程序中使用LibreOffice,那么您可能会遇到相同的错误。我在生产环境中使用较旧版本的LibreOffice,在我的PC上安装了一个新版本,导致冲突。只需卸载LibreOffice即可解决问题。我在这里找到了解决方案.NET CLI: Could not load file or assembly 'cli_cppuhelper'


0

我发现与其他答案不同的东西。在我的项目中遇到这个异常是编译损坏的结果。没有进行任何更改,只需强制重新构建,问题就解决了。


-1

你是否试图从cmd运行.exe文件?这是我的错误。只需双击.exe文件即可运行。如果它是一个.NET Core SCD,适用于Windows 8.1 / Windows Server 2012 R2 x64。


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