我有两个项目ProjectA
和ProjectB
。 ProjectB
是一个控制台应用程序,它依赖于ProjectA
。昨天,一切都运转良好,但今天我突然跑ProjectB
时得到了这个:
BadImageFormatException未处理:
无法加载文件或程序集“ProjectA,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null”或其依赖项之一。试图加载格式不正确的程序。
两者都只是常规项目,不依赖于任何其他非.Net项目。两者都是.Net - 没有本机代码,也没有P / Invoke。我有其他依赖于ProjectA
的项目,但仍然可以正常工作。
我尝试过的事情:
但我仍然得到同样的错误。我不知道我做了什么导致这个,也不知道如何解决它。有什么想法吗?
答案 0 :(得分:546)
我很确定你有32位/ 64位冲突。听起来您的主项目可能设置为32位,而其引用的类设置为64位。尝试查看this SO question和this one too。在他们两个之间,你应该能够找出你的问题。
答案 1 :(得分:170)
在服务器上部署后,您可能会遇到网站问题。
然后,您需要将应用程序池调整为启用32位应用程序。
步骤:
答案 2 :(得分:102)
我刚刚在Visual Studio 2015中运行此IIS错误消息。在我的情况下,我需要运行64位版本的IIS Express:
工具 - >选项 - >项目和解决方案 - >网络项目
选中复选框 说“使用64位版本的IIS Express用于网站和 项目”。
截图:
答案 3 :(得分:24)
我有同样的问题。我设置了项目A"平台目标" ("项目A"(右键单击) - >属性 - >构建 - >"平台目标")到x86但保持项目B在"任何CPU"。将项目B设置为" x86"修好了。
答案 4 :(得分:13)
我在Visual Studio 2015中运行单元测试(xunit)时遇到此问题并遇到以下问题:
[Serializable]
class C
{
String str { get; set; }
int num { get; set; }
}
答案 5 :(得分:6)
如果您的项目中至少有一个32位dll \ exe,则可能需要在IIS 7中将应用程序池设置“启用32位应用程序”更改为TRUE。
答案 6 :(得分:3)
首先,我在VS2017中得到了一个旧项目,我需要对 tiny 进行更改并将所有项目升级到框架4.7。
其他几位提及选择Any CPU
可以解决此问题。
您需要完成几个地方,它可能不仅仅是从下拉列表中选择。这为我解决了这个问题:
1)你需要在这里做到这一点:
2)以及Configuration Manager
(右键点击解决方案)
但如果它不存在怎么办?
然后点击New
并选择以下设置:(thanks @RckLN)
答案 7 :(得分:2)
这些解决方案都不适用于我 - 但是通过删除bin和obj文件夹的内容,一切都很酷了。
答案 8 :(得分:2)
答案 9 :(得分:2)
我在使用Visual Studio Build
步骤通过Visual Studio Online(VSTS)Build构建项目时得到了这个。
解决方案是:
答案 10 :(得分:2)
如果您尝试在VS中使用MSI安装程序打包64位项目,也可能会看到此问题。 (“原因是因为.msi文件打包的本机填充程序是32位可执行文件。”)
答案 11 :(得分:2)
我在同一个解决方案中遇到了同一个问题,我最终将所有目标框架设置为.NET Framework 4和x86用于目标CPU,最终成功编译。
答案 12 :(得分:1)
在我的C#项目中,项目属性 - > [Build] - >平台目标:任何CPU, 并取消选中Prefer 32-bit,让编译器自动选择。
答案 13 :(得分:1)
这也可以通过在 app.config 文件中定义多个支持的框架来实现,并强制应用程序在不同的.NET框架中运行一个首先在app.config文件中提到。
如果你的系统中有两个提到的框架,那么这也会激发。
作为一种解决方法,在app.config中调出您将用于调试的目标框架
例如:如果你试图在.NET 4中运行,配置文件应该有类似的东西,
<supportedRuntime version="v4.0"/>
<supportedRuntime version="v2.0.50727"/>
答案 14 :(得分:1)
我也在一个项目中遇到这个问题,几分钟后我找到了解决方案, 这个问题是由CPU配置引起的, 如果您使用的是 Visual Studio 2010或VS 2013 ,只需转到项目的属性,然后从侧栏中选择编译将是5下拉,第5下拉将是目标CPU:,您应该根据您的要求而不是任何CPU将其设置为 x86或x64 。
将问题更改为x86后,问题解决了。
答案 15 :(得分:1)
Chilkat .NET 4.5程序集要求在运行应用程序的任何计算机上安装VC ++ 2012或2013运行时。大多数计算机已经安装了它。您的开发计算机将拥有它,因为已安装Visual Studio。但是,如果部署到无法使用所需VC ++运行时的计算机,则会出现上述错误:
安装所有波纹管包
Visual Studio 2013的Visual C ++可再发行软件包 - vcredist_x64
Visual Studio 2013的Visual C ++可再发行软件包 - vcredist_x86
Visual Studio 2012的Visual C ++可再发行软件包 - vcredist_x64
Visual Studio 2012的Visual C ++可再发行软件包 - vcredist_x86
答案 16 :(得分:1)
我遇到了同样的问题。它突然出现了,这对我来说似乎很奇怪。
在Exception快照中,对于FusionLog,我在其消息中看到以下内容:
... C:\ Windows \ Microsoft.NET \ Framework64 ...
有关融合日志的更多信息:http://msdn.microsoft.com/en-us/library/e74a18c4(v=vs.110).aspx
所有项目的目标CPU均为AnyCPU。我将应用程序项目(引用所有其他项目的项目)更改为x86的目标CPU。它现在有效。
不确定目标CPU是如何混合发生的,没有明显的原因,但确实如此。
答案 17 :(得分:1)
如果您像我一样通过cli .net integration 从您的程序中使用LibreOffice,我也会遇到同样的错误。我在PC上的生产环境中使用旧版本的LibreOffice我安装了一个冲突的新版本。 只需卸载LibreOffice。我在此处找到了解决方案.NET CLI: Could not load file or assembly 'cli_cppuhelper'
答案 18 :(得分:0)
对于较新版本的visual studio(此答案为v16.10),可以通过手动更改解决方案平台来修复。对我来说,它在从“任何 CPU”更改为“x86”后起作用了。
答案 19 :(得分:0)
我有同样的问题。在我的案例中,项目B是.Net核心类库,其中安装了Nuget“ Microsoft.Management.Infrastructure”。错误是我将项目B称为“ MI”。我将项目名称更改为其他名称,然后突然一切恢复正常。
答案 20 :(得分:0)
我发现与其他答案有所不同。在我的项目中达到此异常是编译损坏的结果。无需进行任何更改,只需强制重建,它便已修复。
答案 21 :(得分:0)
射击!我知道这个问题。我以为我做的一切正确,直到我在VS输出窗口中意外看到“ x86”,这就是我掌握原因的时候。今天浪费了几分钟。
“发布”窗口下的配置设置为“ x86”;而在其他所有地方都是“ x64”。
请确保它在配置管理器之间是同步的,发布设置,解决方案配置和IIS设置(如果这是您的Web服务器)。
此外,请记住-VS是32位应用程序,而IIS是64位。默认情况下,IIS中禁用了32位应用程序。
答案 22 :(得分:0)
在我的情况下,引发此异常的dll中缺少依赖项。我与Dependency Walker进行了检查,添加了缺少的dll,问题得以解决。
更具体地说,我无意中将SVN关键字添加到了opencv_core340.dll,从而导致dll无法再使用它。但是,我不认为该问题的解决方案取决于dll是否损坏或丢失。我只是为了提供完整的信息而添加它。
答案 23 :(得分:0)
我在Visual Studio 2017上使用ReSharper运行单元测试也遇到了这个问题,并使用以下配置修复它:
您还可以更改ReSharper的运行测试设置: https://resharper-support.jetbrains.com/hc/en-us/articles/207242715-How-to-run-MSTest-tests-using-x64-configuration
答案 24 :(得分:0)
这可能有点滑稽,但我对正常工作代码有同样的问题。我添加了StreamWriter和StreamReader,它给出了错误。 解决方案是我将代码放入注释括号然后进行调试,它又开始工作了
答案 25 :(得分:-1)
您是否尝试从cmd运行.exe文件?这是我的错。只需双击它即可运行.exe文件。如果它是适用于Windows 8.1 / Windows Server 2012 R2 x64的.NET Core SCD。
答案 26 :(得分:-1)
我的机器向我显示了BIOS更新,我想知道这是否与此错误的突然弹出有关。在我完成更新后,错误得到解决,解决方案构建正常。
答案 27 :(得分:-1)
在我的情况下,错误是 System.BadImageFormatException:无法加载文件或程序集'vjslib,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'或其依赖项之一。 < / p>
通过从here安装vjredist 64来解决。