无法加载文件或程序集...尝试加载格式不正确的程序(System.BadImageFormatException)
我有两个项目,ProjectA
和ProjectB
。 ProjectB
是一个控制台应用程序,它取决于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。重新启动我的电脑。
- 检出版本库的全新副本。
但我仍然得到相同的错误。我不知道我是如何做到这一点的,也不知道如何解决这个问题。有任何想法吗?
我很确定你有32位/ 64位冲突。这听起来像你的主项目可能被设置为32位,而其参考的类设置为64位。试着看看this SO question和this one too。在他们两个之间,你应该能够弄清楚你的问题。
Do'h。我以某种方式在'project - > properties - > build'中完全丢失了“platform target”下拉菜单 - 它已经设置为x86;将其设置为“任何CPU”解决了此问题。我一直认为这个设置与配置管理器中的“平台目标”下拉菜单相同,但显然它不是*(事实上,配置管理器中的“平台目标”似乎根本没有做任何事情!)* – 2012-08-03 22:07:36
同时验证该项目不是任何CPU与首选32位检查。项目 - >属性 - >构建 – 2013-11-18 18:34:39
你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”解决了这个问题。
中设置这解决了我的问题,我不得不将我的两个项目都保存为“任何CPU”。似乎有人在我的代码库中更改了.csproj文件 – 2017-12-26 20:47:49
我在同一个解决方案中遇到了多个项目的相同问题,我最终将目标框架的所有目标框架都设置为.NET Framework 4和x86,并且最终成功编译了它。
在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。
OP是在谈论一个控制台应用程序而不是IIS – MickyD 2016-02-03 11:20:49
在服务器上进行部署后,您可能正面临网站问题。
然后,您需要将您的应用程序池调整为启用32位应用程序。
步骤:
- 打开IIS管理器
- 点击应用程序池
- 选择任何应用程序池使用的是
- 从右侧窗格中,单击高级设置...
- 设置启用32位应用为真
我错过了什么吗? OP讨论的是_console app_而不是IIS部署:_“ProjectB是一个控制台应用程序,它依赖于ProjectA”_ – MickyD 2016-02-03 11:19:57
我没有32位/ 64位冲突,回答,我的问题已经过去了' – 2016-07-12 13:14:33
非常感谢!我在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位可执行文件。”)
考虑为未来读者的利益总结链接的文章;以防链路死亡。 – 2015-10-14 16:42:09
它可以是一个有点滑稽,但我有与正常工作代码相同的问题。我添加了StreamWriter和StreamReader,它给了这个错误。 解决方案是我把该代码放入注释括号,然后进行调试,并开始重新工作
我刚刚在Visual Studio 2015中运行IIS Express的此错误消息。在我来说,我需要运行IIS快递的64位版本:
工具 - >选项 - >项目和解决方案 - > Web项目
检查,说:“使用的64位版本的包装盒 IIS Express for web站点和 项目“。
截图:
这也可以只通过具有多个支持框架在的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文件夹的内容,一切都变得很酷了。
奇尔卡特.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的运行单元测试这个问题,并与下面的配置固定它:
您也可以更改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),并在Configuration Manager
(右键单击解决方案)
但如果它不在那里?
然后点击New
,选择这些设置:如果您在资源库中有一个版本历史记录(thanks @RckLN)
,你可以检查是否有在的csproj文件有哪些区别? – Steve 2012-07-06 22:22:26
@Steve:根据Mercurial的说法,除了添加对新的.cs文件的引用之外,没有其他更改 – 2012-07-06 22:23:12
您是否在另一台机器上获得相同的行为?计算机上是否有其他更改(例如,Windows更新,依赖关系更新等)? – 2012-07-07 00:44:19