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

问题描述:

我有两个项目,ProjectAProjectBProjectB是一个控制台应用程序,它取决于ProjectA。昨天,一切都被今天的工作正常,但突然当我运行ProjectB我得到这个:无法加载文件或程序集...尝试加载格式不正确的程序(System.BadImageFormatException)

BadImageFormatException了未处理
无法加载文件或程序集“项目A,版本= 1.0.0.0,文化=中性,PublicKeyToken = null'或它的一个依赖关系。试图加载格式不正确的程序。

两者都只是常规项目,没有任何其他non.Net项目的依赖。两者都完全.Net - 没有本地代码,也没有P/Invoke。我有其他项目取决于ProjectA,仍然工作得很好。

事情我已经尝试:

  • 确保这两个项目都设置为“任何CPU”,与构建复选框选中。他们是。
  • 确保两个项目都是针对相同的目标框架(.Net 4.0客户端配置文件)
  • 在项目B - >参考 - >项目A - >属性,确保“复制本地”设置为“真” _ (我核实,ProjectA.dll被正确拷贝)
  • 清洁/重建解决方案。我甚至尝试在两个项目中手动删除/ bin和/ obj文件夹。
  • 重新启动Visual Studio。重新启动我的电脑。
  • 检出版本库的全新副本。

但我仍然得到相同的错误。我不知道我是如何做到这一点的,也不知道如何解决这个问题。有任何想法吗?

+0

,你可以检查是否有在的csproj文件有哪些区别? – Steve 2012-07-06 22:22:26

+0

@Steve:根据Mercurial的说法,除了添加对新的.cs文件的引用之外,没有其他更改 – 2012-07-06 22:23:12

+0

您是否在另一台机器上获得相同的行为?计算机上是否有其他更改(例如,Windows更新,依赖关系更新等)? – 2012-07-07 00:44:19

我很确定你有32位/ 64位冲突。这听起来像你的主项目可能被设置为32位,而其参考的类设置为64位。试着看看this SO questionthis one too。在他们两个之间,你应该能够弄清楚你的问题。

+49

Do'h。我以某种方式在'project - > properties - > build'中完全丢失了“platform target”下拉菜单 - 它已经设置为x86;将其设置为“任何CPU”解决了此问题。我一直认为这个设置与配置管理器中的“平台目标”下拉菜单相同,但显然它不是*(事实上,配置管理器中的“平台目标”似乎根本没有做任何事情!)* – 2012-08-03 22:07:36

+6

同时验证该项目不是任何CPU与首选32位检查。项目 - >属性 - >构建 – 2013-11-18 18:34:39

+5

你ROCK!我花了几个小时尝试各种各样的事情,但是当我将CPU目标更改为x86时,它可以工作(因为我引用的Interops当然是32位的)。 – 2014-03-13 16:58:40

我有这个相同的问题。我将Project A的“Platform Target”(“Project A”(右键单击) - > Properties - > Build - >“Platform Target”)设置为x86,但保留了Project B的“Any CPU”。将项目B的设置为“x86”解决了这个问题。

+0

中设置这解决了我的问题,我不得不将我的两个项目都保存为“任何CPU”。似乎有人在我的代码库中更改了.csproj文件 – 2017-12-26 20:47:49

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

+1

在Release中工作,但在Debug中失败。将全部设置为.Net Framework 4(不是更新1),并立即运行调试。 – DCastenholz 2016-01-20 02:43:57

我遇到了同样的问题。它突然出现,这对我来说似乎很陌生。

在例外的快照,对于FusionLog,我看到了它的消息中的以下内容:

... C:\ WINDOWS \ Microsoft.NET \ Framework64 ...

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

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

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

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

+0

OP是在谈论一个控制台应用程序而不是IIS – MickyD 2016-02-03 11:20:49

在服务器上进行部署后,您可能正面临网站问题。

然后,您需要将您的应用程序池调整为启用32位应用程序。

步骤:

  1. 打开IIS管理器
  2. 点击应用程序池
  3. 选择任何应用程序池使用的是
  4. 从右侧窗格中,单击高级设置...
  5. 设置启用32位应用为真

enter image description here

+0

我错过了什么吗? OP讨论的是_console app_而不是IIS部署:_“ProjectB是一个控制台应用程序,它依赖于ProjectA”_ – MickyD 2016-02-03 11:19:57

+2

我没有32位/ 64位冲突,回答,我的问题已经过去了' – 2016-07-12 13:14:33

+1

非常感谢!我在Pechkin不工作时遇到了麻烦。 – CareTaker22 2016-10-28 06:36:15

我也面临这个问题在一个项目中,几分钟后,我找到了解决办法, 这个问题是由于CPU的配置, 如果使用的Visual Studio 2010或VS 2013,只是转到项目“小号性质,然后选择从侧栏编译会有5下拉,第5下拉将目标CPU:,你应该把它根据您的要求,而不是设置为x86或x64任何CPU。

将其更改为x86后,我的问题得到解决。

如果您尝试在VS中打包一个带MSI安装程序的64位项目,也可能会看到此问题。 (“原因是因为.msi文件打包本地垫片是一个32位可执行文件。”)

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

+0

考虑为未来读者的利益总结链接的文章;以防链路死亡。 – 2015-10-14 16:42:09

它可以是一个有点滑稽,但我有与正常工作代码相同的问题。我添加了StreamWriter和StreamReader,它给了这个错误。 解决方案是我把该代码放入注释括号,然后进行调试,并开始重新工作

我刚刚在Visual Studio 2015中运行IIS Express的此错误消息。在我来说,我需要运行IIS快递的64位版本:

工具 - >选项 - >项目和解决方案 - > Web项目
检查,说:“使用的64位版本的包装盒 IIS Express for web站点和 项目“。

截图:

Screenshot of VS options for Web Project.

+0

我不相信这甚至需要发生。为什么它不会根据项目设置检测到64位。微软在夜间让我哭泣 – schmoopy 2017-02-02 06:14:09

+0

恰恰相反,我有'使用64位'打勾并需要将它解开...... – cjb110 2017-03-14 08:21:33

+0

谢谢!我检查了所有的构建设置,甚至经历了所有的依赖关系。啊。 – bouke 2017-03-17 10:16:38

这也可以只通过具有多个支持框架的app.config文件中定义,并迫使应用程序在不同的.NET运行发生除了在app.config文件中首先提到的一个以外的框架。

而且当你在你的系统中提供了两个提到的框架时,这也会引发火灾。

作为一种变通方法,带来了你要在App.config为调试使用了目标框架

例如:如果你想在.NET 4运行配置文件中应该有类似的东西对此,

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

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

我有这个问题,运行单元测试(的xUnit)在Visual Studio 2015年和整个以下修补程序来:

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

我的机器给我一个BIOS更新,我不知道如果有事情做与突然出现这个错误。更新完成后,错误得到解决,解决方案生成良好。

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

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

将溶液:

  • 删除现有的源文件夹
  • 明确设置在该平台的任何CPU'的所有Visual Studio构建包括依赖关系(参见下图)。
  • 重新运行构建

VSO Screenshot

奇尔卡特.NET 4.5组装需要将任何一台计算机在您的应用程序运行所安装的VC++ 2012或2013年运行。大多数电脑已经安装。您的开发计算机将拥有它,因为Visual Studio已安装。但是,如果部署到所需的VC++运行时无法使用电脑,就会出现上述错误:

安装所有波纹管包

的Visual C++可再发行的Visual Studio包2013 - vcredist_x64

的Visual C++可再发行的Visual Studio 2013软件包 - vcredist_x86

的Visual C++可再发行的Visual Studio 2012包 - v credist_x64

的Visual C++可再发行的Visual Studio包2012 - vcredist_x86

我也有通过在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

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


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

有几个地方你需要做它,它可能不仅仅是从下拉列表中选择一样简单。这个固定为我:

1)你必须在这里做它既:

enter image description here

2),并在Configuration Manager(右键单击解决方案)

enter image description here

但如果它不在那里?

然后点击New,选择这些设置:如果您在资源库中有一个版本历史记录(thanks @RckLN

enter image description here