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

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

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

我尝试过的事情:

Make sure both projects are set to "Any CPU," with the build checkbox checked. They are. Make sure both projects are for the same Target Framework (.Net 4.0 Client Profile). Under ProjectB --> References --> ProjectA --> Properties, make sure "Copy Local" is set to "True" _ (I verified that ProjectA.dll is being copied correctly) Clean/Rebuild the solution. I even tried manually deleting the /bin and /obj folders in both projects. Restart Visual Studio. Restart my computer. Check out an entirely new copy of the repository.

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


我非常确定您遇到了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是如何混淆的,没有明显的原因,但它确实发生了。


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


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

然后将应用程序池调整为启用32位应用程序。

步骤

打开IIS管理器 单击应用程序池 选择您正在使用的任何应用程序池 从右侧窗格,单击高级设置… “启用32位应用程序”设置为“True”


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

我的问题在更改为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网站和 项目”。

截图:


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

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

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

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

<supportedRuntime version="v4.0"/>
<supportedRuntime version="v2.0.50727"/>

在我的c#项目中,项目属性->[构建]->平台目标:任何CPU, 并取消选择首选32位,让编译器自动选择。


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

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

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


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


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

解决方案是:

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


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运行单元测试时也遇到了这个问题,并通过以下配置修复了它:

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


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


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

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

1)你需要做到这两点:

2)在配置管理器中(右键单击解决方案)

但如果它不在那里呢?

然后点击新建,选择这些设置:(谢谢@RckLN)


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


如果你像我一样通过cli .net集成从你的程序中使用LibreOffice,我也会得到同样的错误。我在PC上的生产环境中使用了旧版本的LibreOffice,我安装了一个冲突的新版本。卸载LibreOffice即可。我在这里找到了解决方案。net CLI:无法加载文件或程序集“cli_cppuhelper”


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

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


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

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

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

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


下面的方法为我解决了这个问题,取消选中“Prefer” 32位”:


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


我也有同样的问题。项目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”改为“x86”后,它就工作了。

点击解决方案平台下拉菜单,其中任何CPU出现在下面的图像。 进入配置管理器。 单击new并根据您的工作情况添加平台x86或x64(32或64位)。 重新启动项目。


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


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

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


在我的案例中,将IIS Express Bitness从“默认”更改为“x86”有帮助。

我所有的项目都以“x86”作为平台目标。