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

我有两个项目, ProjectAProjectBProjectB是一个控制台应用程序,依赖于ProjectA 。 昨天,一切正常,但突然间,当我运行ProjectB我得到这个:

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

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

我已经尝试过的事情:

  • 确保两个项目都设置为“任何CPU”,并检查构buildcheckbox。 他们是。
  • 确保两个项目都是用于相同的目标框架(.Net 4.0客户端configuration文件)
  • 在ProjectB – >参考 – > ProjectA – >属性,确保“复制本地”设置为“真” _ (我证实ProjectA.dll被正确复制)
  • 清理/重build解决scheme。 我甚至尝试在两个项目中手动删除/ bin和/ obj文件夹。
  • 重新启动Visual Studio。 重新启动我的电脑。
  • 检出一个全新的版本库。

但我仍然得到同样的错误。 我不知道我做了什么来解决这个问题,也不知道如何解决这个问题。 有任何想法吗?

我很确定你有一个32位/ 64位的冲突。 这听起来像你的主要项目可能被设置为32位,而其引用的类设置为64位。 试着看看这个问题,也是这个 。 在他们两个之间,你应该能够弄清楚你的问题。

在服务器上部署后,可能会遇到与您的网站有关的问题。

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

脚步:

  1. 打开IISpipe理器
  2. 点击应用程序池
  3. select你使用的任何应用程序池
  4. 在右侧窗格中,点击高级设置…
  5. 将启用32位应用程序设置为True

在这里输入图像描述

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

工具 – >选项 – >项目和解决scheme – > Web项目
选中“为站点和项目使用IIS Express的64位版本”checkbox。

截图:

Web项目的VS选项的屏幕截图。

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

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

我有这个问题在Visual Studio 2015中运行unit testing(xunit),并遇到以下修复:

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

我在同一个解决scheme中遇到了多个项目的问题,我最终将目标框架的所有目标框架设置为.NET Framework 4和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

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

在exception快照中,对于FusionLog,我在其消息中看到以下内容:

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

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

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

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

我也在一个项目中遇到了这个问题,几分钟后我发现了解决scheme,这个问题是由于CPUconfiguration造成的,如果你使用的是Visual Studio 2010或者VS 2013 ,只需要转到项目的属性 ,然后从侧栏selectCompile并且会有5个下拉菜单,第5个下拉菜单是Target CPU:,您应该根据您的要求将其设置为x86或x64 ,而不是任何CPU。

将其更改为x86后,我的问题就解决了。

这也可以通过在app.config文件中定义多个受支持的框架并强制应用程序运行在不同于在app.config文件中首先提到的另一个.NET框架中运行。

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

作为一个解决方法,调出你要在app.config中debugging的目标框架

例如:如果你试图运行在.NET 4中,configuration文件应该有类似的东西,

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

在我的项目为C#,项目属性 – > [生成] – >平台目标:任何CPU,取消select首选32位让编译器自动select。

这些解决scheme都没有为我工作 – 但通过删除bin和obj文件夹的内容,一切都很酷。

当通过使用Visual Studio Build步骤的Visual Studio Online(VSTS)构build项目来构build项目时,我得到了这一点。

解决scheme是:

  • 删除现有的源文件夹
  • 在平台中为所有Visual Studio版本(包括依赖项)明确设置“任何CPU”(请参阅​​下面的截图)。
  • 重新运行构build

VSO截图

这可能有点有趣,但是我有与正常工作代码相同的问题。 我添加了StreamWriter和StreamReader,它给了这个错误。 解决scheme是我把代码放入注释括号,然后进行debugging,并开始重新工作

我的机器向我展示了一个BIOS更新,我想知道这是否与突然出现这个错误有关。 更新完成后,错误已解决,解决scheme已正常生成。