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

我有两个项目,ProjectAProjectBProjectB是一个控制台应用程序,依赖于ProjectA。昨天,一切都工作得很好,但今天突然当我运行ProjectB时,我得到了这个:

< p > BadImageFormatException未处理: < br > 无法加载文件或程序集“ProjectA, Version=1.0.0.0, Culture=中性,PublicKeyToken=null”或其依赖项之一。试图加载格式不正确的程序

两者都只是常规项目,不依赖于任何其他非。网络项目。两者都是完全的。net -没有本机代码,也没有P/Invoke。我有其他依赖ProjectA的项目,仍然工作得很好。

我尝试过的事情:

  • 确保两个项目都被设置为“Any CPU”,并选中构建复选框。他们是。
  • 确保两个项目都是针对同一个目标框架(.Net 4.0客户端简介)
  • 在ProjectB——> References——> ProjectA——> Properties下,确保“复制本地”被设置为“真正的” _ (我验证ProjectA.dll被正确复制)
  • 清理/重新构建解决方案。我甚至尝试手动删除两个项目中的/bin和/obj文件夹。
  • 重新启动Visual Studio。重启我的电脑。
  • 查看一个全新的存储库副本。

但还是得到相同的错误。我不知道我做了什么导致了这一切,也不知道该怎么补救。什么好主意吗?

599481 次浏览

我非常确定您遇到了32位/ 64位冲突。听起来好像您的主项目可能被设置为32位,而其引用的类被设置为64位。尝试查看这个SO问题这个也是。在这两者之间,你应该能够解决你的问题。

我也有同样的问题。我已经将项目A的“平台目标”(“项目A”(右键单击)->属性->构建->“平台目标”)设置为x86,但保持项目B的“任何CPU”。将项目B设置为“x86”修复了这个问题。

我在同一个解决方案中的多个项目中遇到了同样的问题,我最终将所有目标框架设置为. net Framework 4和目标CPU的x86,最终成功编译。

我也遇到过同样的问题。它突然出现了,这对我来说很奇怪。

在异常快照中,对于FusionLog,我看到它的消息如下:

... C:\Windows\Microsoft.净\ Framework64…

关于融合日志的更多信息:http://msdn.microsoft.com/en-us/library/e74a18c4 (v = vs.110) . aspx

所有项目都有一个目标CPU为AnyCPU。我将应用程序项目(引用所有其他项目的项目)更改为x86的目标CPU。现在起作用了。

不知道目标CPU是如何混淆的,没有明显的原因,但它确实发生了。

如果你的项目中至少有一个32位dll\exe,你可能需要在IIS7中将Appication池设置“启用32位应用程序”更改为TRUE。

可能是你的网站部署到服务器后遇到的问题。

然后你需要调整你的应用程序池为启用32位应用程序

步骤

  1. 打开IIS管理器
  2. 单击应用程序池
  3. 选择您正在使用的任何应用程序池
  4. 从右侧窗格,单击高级设置…

  5. 将Enable 32位应用程序设置为True

    高级设置Enable 32-Bit < / p > < / >

我在一个项目中也遇到过这个问题,几分钟后我找到了解决方案, 这个问题是由于CPU配置, 如果你使用的是Visual Studio 2010或VS 2013,只要转到项目的属性,然后从侧栏中选择编译,就会有5个下拉菜单,第5个下拉菜单将是目标CPU:,你应该根据你的要求将它设置为X86或x64,而不是任何CPU。< / p >

我的问题在更改为x86之后就解决了。

如果您试图在VS.中使用MSI安装程序打包一个64位项目,也可能会遇到这个问题(“原因是。MSI文件打包的本机shim是32位可执行文件”)。

更多细节:http://blogs.msdn.com/b/heaths/archive/2006/02/01/64-bit-managed-custom-actions-with-visual-studio.aspx

这可能有点好笑,但我在正常工作的代码中遇到了同样的问题。我添加了StreamWriter和StreamReader,它给出了这个错误。 解决方案是我把代码放入注释括号,然后进行调试,它又开始工作了

我刚刚在Visual Studio 2015中运行IIS Express时遇到了这个错误消息。在我的情况下,我需要运行64位版本的IIS Express:

工具→选项→项目和解决方案→Web项目
勾选方框 上面写着“使用64位版本的IIS Express网站和 项目”。< / p >

截图:

 VS options for Web Project. < / >

这也可以通过在app.config文件中定义支持的多种框架来实现,并强制应用程序在不同的。net框架中运行而不是在app.config文件中首先提到

而且,当您的系统中同时拥有上述两个框架时,它也会触发。

作为一种变通方法,在app.config中调出用于调试的目标框架

如果你试图在。net 4中运行,配置文件应该有类似这样的东西,

<supportedRuntime version="v4.0"/>
<supportedRuntime version="v2.0.50727"/>
在我的c#项目中,项目属性->[Build]->平台目标:任何CPU, 取消选择32位,让编译器自动选择

我在Visual Studio 2015中运行单元测试(xunit)时遇到了这个问题,并遇到了以下修复:

Menu Bar -> Test -> Test Settings -> Default Processor Architecture -> X64

我的机器向我显示了BIOS更新,我想知道这是否与突然弹出的这个错误有关。在我进行了更新之后,错误被解决了,解决方案构建得很好。

这些解决方案都不适合我,但通过删除bin和obj文件夹的内容,一切都变酷了。

我在通过Visual Studio Online (VSTS) Build使用Visual Studio Build步骤构建一个项目时得到了这个。

解决方案是:

  • 删除已有的源文件夹
  • 在平台中为所有Visual Studio build(包括依赖项)显式地设置“Any CPU”(见下面的截图)。
  • 重新运行构建

VSO截图

Chilkat . net 4.5程序集要求在应用程序运行的任何计算机上安装vc++ 2012或2013运行时。大多数电脑都已经安装了它。您的开发计算机将拥有它,因为已经安装了Visual Studio。但是,如果部署到所需的vc++运行时不可用的计算机上,则会出现上述错误:

安装所有的波纹包

vcredist_x64 for Visual Studio 2013

vcredist_x86 for Visual Studio 2013

Visual Studio 2012的vcredist_x64

Visual Studio 2012 vcredist_x86的Visual c++可重分发包

我在Visual Studio 2017上使用ReSharper运行单元测试时也遇到了这个问题,并通过以下配置修复了它:

enter image description here

你也可以改变ReSharper的运行测试设置: https://resharper-support.jetbrains.com/hc/en-us/articles/207242715-How-to-run-MSTest-tests-using-x64-configuration < / p >

首先,我在VS2017中的一个旧项目中得到了这个,我需要对进行更改,并将所有项目升级到框架4.7。


其他一些人提到选择Any CPU可以解决这个问题。

有几个地方需要这样做,可能不只是从下拉菜单中选择那么简单。这为我解决了问题:

1)你需要做到这两点:

enter image description here

2)也在Configuration Manager中(右键单击解决方案)

enter image description here

但如果它不在那里呢?

然后单击New并选择这些设置:(由于@RckLN)

enter image description here

您正在尝试从cmd运行您的.exe文件吗?这是我的错。只需双击运行.exe文件。如果是Windows 8.1/Windows Server 2012 R2 x64的。net Core SCD。

如果你使用LibreOffice从你的程序通过cli .net集成和我一样,我得到了同样的错误。我在PC上的生产环境中使用了旧版本的LibreOffice,我安装了一个冲突的新版本。我在这里找到了解决方案

在我的例子中,抛出这个异常的dll中缺少一个依赖项。我检查了依赖步行者,添加了丢失的dll,问题解决了。

更具体地说,我不小心将SVN关键字添加到opencv_core340.dll中,从而损坏了我的opencv_core340.dll,因此我的dll不能再使用它。然而,我不相信这个问题的解决方案取决于dll是否损坏或丢失。我添加这个只是为了给出完整的信息。

开枪!我知道这个问题。我以为我做的一切都是对的,直到我不小心在VS输出窗口中看到'x86',那是我抓住原因的时候。今天在这上面浪费了几分钟。

“发布”窗口下的配置被设置为“x86”;而在其他地方,它是'x64'。

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

另外,请记住- VS是一个32位的应用程序,IIS是64位的。32位应用程序在IIS中默认是禁用的。

enter image description here

下面的方法为我解决了这个问题,取消选中“Prefer” 32位”: enter image description here < / p >

我发现了一些不同于其他答案的东西。在我的项目中出现这个异常是错误编译的结果。没有做任何改变,只是迫使重建,它被修复了。

我也有同样的问题。项目B在我的案例中是一个。net核心类库,它有一个Nuget“Microsoft.Management”。安装基础设施”。错误在于我把我的B项目叫做MI。我将项目名称改为其他名称,突然之间一切都恢复正常了。

在我的例子中,错误是系统。BadImageFormatException:无法加载文件或程序集'vjslib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'或其依赖项之一。

通过从在这里安装vjredist 64解决了这个问题。

对于visual studio的新版本(本答案为v16.10),可以通过手动更改解决方案平台来修复该问题。对我来说,从“任意cpu”改为“任意cpu”后,它就工作了。x86"“帮助”。

  1. 单击解决方案平台下拉菜单,即下图中显示任何CPU的下拉菜单。 enter image description here < / p >

  2. 进入配置管理器。

    enter image description here

  3. 单击new并根据您的工作情况添加平台x86或x64(32或64位)。 enter image description here < / p >

  4. 重启项目。

我也有这个问题。如前所述,该问题与32位/ 64位冲突有关,但与托管在Azure中的站点有关。要在Azure应用程序服务中更改平台,请转到配置->一般设置。 enter image description here < / p >

有趣的是,如果文件夹路径很长,也会发生这种情况,这会导致构建问题,奇怪的是,会出现这个神秘的错误消息。

只要把文件夹移动到路径上,问题就解决了!

在我的例子中,将IIS Express Bitness从“default”更改为“;“;x86"帮助。

我所有的项目都有“;x86"作为平台的目标。

VS 2022:项目属性>网络”/ > < / ></p></div>
                                                                            </div>
                                </div>
                            </div>
                        </div>
                                            </div>
                </div>

                <br/>
                <div class=