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

Blu*_*eft 376 c# exception console-application badimageformatexception

我有两个项目,ProjectAProjectB. ProjectB是一个控制台应用程序,依赖于ProjectA.昨天,一切都运转良好,但今天突然我跑了,ProjectB我得到了这个:

BadImageFormatException未处理:
无法加载文件或程序集"ProjectA,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null"或其依赖项之一.尝试加载格式不正确的程序.

两者都只是常规项目,不依赖于任何其他非.Net项目.两者都是.Net - 没有本机代码,也没有P/Invoke.我有其他项目依赖ProjectA并仍然工作得很好.

我尝试过的事情:

  • 确保两个项目都设置为"任何CPU",并选中" 构建"复选框.他们是.
  • 确保两个项目都针对相同的目标框架(.Net 4.0 Client Profile).
  • 在ProjectB - >引用 - > ProjectA - >属性下,确保"复制本地"设置为"True" _ (我验证正在正确复制ProjectA.dll)
  • 清理/重建解决方案.我甚至尝试手动删除两个项目中的/ bin和/ obj文件夹.
  • 重新启动Visual Studio.重启我的电脑.
  • 查看存储库的全新副本.

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

Ice*_*ind 600

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

  • Do'h.我在某种程度上完全错过了`project - > properties - > build`中的"platform target"下拉列表 - 它是为x86设置的; 将其设置为"任何CPU"修复此问题.我一直认为这个设置与配置管理器中的"平台目标"下拉列表相同,但显然它不是*(事实上,配置管理器中的"平台目标"似乎根本没有做任何事情!)* (67认同)
  • PS:另一个原因是"启用32位应用程序"在应用程序池设置中为"假".将其设置为true后,需要重新启动IIS. (24认同)
  • 同时验证项目是否为"选择首选32位的任何CPU".项目 - >属性 - >构建 (9认同)
  • 你摇滚!我花了好几个小时尝试各种各样的东西,但当我将CPU目标更改为x86时,它可以工作(因为我引用的Interops当然是32位). (5认同)
  • 这个错误发生在我身上的最糟糕的事情是当VS决定在一个依赖项目中附加`<PlatformTarget> x86 </ PlatformTarget>`时,完全没有任何理由.如果我没有查看SVN,我将永远不知道为什么我们的MVC应用程序无法启动. (2认同)
  • 请在 IIS DefaultAppPool-&gt; Enable 32-Bit Applications = True 中设置 (2认同)

Ali*_*avi 183

在服务器上部署后,您可能会遇到网站问题.

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

脚步:

  1. 打开IIS管理器
  2. 单击"应用程序池"
  3. 选择您正在使用的任何应用程序池
  4. 在右侧窗格中,单击"高级设置"...
  5. 将启用32位应用程序设置为True

在此输入图像描述

  • 我错过了什么?OP 谈论的是 _console 应用程序_而不是 IIS 部署:_“ProjectB 是一个控制台应用程序,它依赖于 ProjectA”_ (2认同)
  • 我没有`32位/ 64位`冲突',并且"使用这个"答案,我的'问题已经消失了' (2认同)

TTT*_*TTT 116

我刚刚在Visual Studio 2015中运行IIS Express时出现此错误消息.在我的情况下,我需要运行64位版本的IIS Express:

工具 - >选项 - >项目和解决方案 - > Web项目
选中"为网站和项目使用64位版本的IIS Express"复选框.

截图:

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

  • 相反的是,我有'使用64位'勾选并需要解开它... (2认同)

小智 30

我有同样的问题.我已将项目A的"平台目标"("项目A"(右键单击) - >属性 - >构建 - >"平台目标")设置为x86,但将项目B保留在"任何CPU".将项目B设置为"x86"修复此问题.


mka*_*kaj 14

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

Menu Bar -> Test -> Test Settings -> Default Processor Architecture -> X64
Run Code Online (Sandbox Code Playgroud)


小智 6

您可能需要改变器件的应用池设置"启用32位应用程序",在IIS7 TRUE,如果你在你的项目中至少有1 32位的DLL\EXE.


Sim*_*ver 6

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


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

您需要在几个地方执行此操作,而且可能不仅仅是从下拉列表中进行选择那么简单。这为我修复了它:

1)你需要在这里做这两个:

在此处输入图片说明

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

在此处输入图片说明

但如果它不存在呢???

然后单击New并选择这些设置:(感谢@RckLN

在此处输入图片说明


Boo*_*ang 6

以下内容为我解决了这个问题,取消选中“首选 32 位”: 在此输入图像描述


Ale*_*kov 6

就我而言,将 IIS Express Bitness 从“默认”更改为“x86”会有所帮助。

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

VS 2022:项目属性 > Web


Sid*_*rma 5

对于较新版本的 Visual Studio(本答案为 v16.10),可以通过手动更改解决方案平台来修复。对我来说,从“任何 CPU”更改为“x86”后它就起作用了。

  1. 单击“解决方案平台”下拉列表,下图中显示了任何 CPU。 在此输入图像描述

  2. 转到配置管理器。

    在此输入图像描述

  3. 单击“新建”并根据适合您的平台添加 x86 或 x64(32 或 64 位)平台。 在此输入图像描述

  4. 重新启动项目。


归档时间:

查看次数:

434295 次

最近记录:

6 年,2 月 前