系统.BadImageFormatException:无法加载文件或程序集。

261
C:\Windows\Microsoft.NET\Framework64\v4.0.30319>InstallUtil.exe C:\_PRODUKCIJA\D
ebug\DynamicHtmlTool.exe
Microsoft (R) .NET Framework Installation utility Version 4.0.30319.1
Copyright (c) Microsoft Corporation.  All rights reserved.

Exception occurred while initializing the installation:
System.BadImageFormatException: Could not load file or assembly 'file:///C:\_PRO
DUKCIJA\Debug\DynamicHtmlTool.exe' or one of its dependencies. An attempt was ma
de to load a program with an incorrect format..

C:\Windows\Microsoft.NET\Framework64\v4.0.30319>

即使两台计算机都是x64,该服务也是以x86编译的,并且在我的电脑上可以工作。但是在这台安装有Windows Server 2008的服务器上出现了错误。

我尝试了谷歌上的解决方案,但都没有生效。

就像这里所说的,我有一个x86项目: http://www.davesquared.net/2008/12/systembadimageformatexception-on-64-bit.html


我进行了一次清理构建,然后再次构建,错误消失了。 - PUG
尝试删除您的网站 bin 和 obj 文件夹,重新构建并运行。 - undefined
5个回答

304

看起来您正在使用64位版本的工具安装32位/x86架构应用程序。请在此处寻找32位版本的工具:

C:\Windows\Microsoft.NET\Framework\v4.0.30319

而且它应该可以很好地安装您的32位应用程序。


63
将目标从“X86”更改为“Any CPU”,或在Visual Studio(编译器设置)中进行更改。 - Tim Schmelter
@TimSchmelter 我希望我能先在这里看到它。这就是我所做的,它起作用了(在我的情况下将目标从任何 CPU 更改为与我的引用项目匹配的 x64)。 - FernandoZ
1
对我来说,我已经两次选择了x86作为我的调试目标...(我归咎于我的阅读障碍) - Peter L
注意:当CPU目标未设置为相同时,从.Net Standard引用的.Net Framework库也会遇到相同的错误。因此,在最近的.Net版本中,这个错误仍然存在。 - Jeff

155

尝试配置您的项目设置,通常是由于x86 / x64体系结构问题:

请按照下图所示进行选择:


这对我来说也是如此。 - Bill Sambrone
刚遇到这个问题,但已经解决了。谢谢! - Alexander Forbes-Reed
1
@David,你是怎么在下拉菜单中得到“混合平台”选项的?我有VS2013,但我的选项只有“任何CPU”,“x64”和“x86”。 - Ottak
@Ottak 我相信你可以创建自己的?(我可能引用了错误的文章) - Jesus is Lord
9
“Test>测试设置>默认处理器架构>x64”对我有效。 - learntogrow-growtolearn

130

我找到了一个解决此问题的不同方法。显然,我的 IIS 7 在默认情况下没有启用应用程序池中的 32 位模式。

为了启用 32 位模式,请打开 IIS 并选择您的应用程序池。我的名字是 "ASP.NET v4.0"。
右键单击,转到“高级设置”,并更改名为“启用 32 位应用程序”的部分为 true。

重新启动 Web 服务器,然后再试一次。

我从这个博客引用中找到了修复方法: http://darrell.mozingo.net/2009/01/17/running-iis-7-in-32-bit-mode/

此外,您可以更改 Visual Studio 的设置。在我的情况下,我进入了 工具 > 选项 > 项目和解决方案 > Web 项目 并勾选了 对于网站和项目使用 64 位版本的 IIS Express- 这是在 VS Pro 2015 上。除此之外没有其他方法可以解决此问题。


谢谢,这让我想起了如何解决类似的问题! - Steven Quick
你能否将此内容贴到https://dev59.com/KnRC5IYBdhLWcg3wW_tk?lq=1上(但请明确说明这不是installutil的情况,只是相同的异常)? - Ruben Bartelink
这是我的情况,非常感谢。 - Aycan Yaşıt
@Joseph 它没有启用,它被模糊了。 - k_kumar
非常感谢您的这篇文章。启用32位解决了我的问题。 - AdamB
显示剩余2条评论

6

我遇到了同样的错误,使用正确的框架仍然无法安装。

我的解决办法是以管理员身份运行cmd……这样就可以正常工作了。


我从未说过我能解释为什么,因为我不能。我的省略号...可能表明了这个事实,对我来说也没有任何意义。但是从经验来看,使用任何微软产品都很常见。 - woony
2
@RubenBartelink,如果Woony有一个有效的解决方法可以帮助他,那么即使他无法解释为什么,分享出来也是很好的。这不是降低投票的理由,特别是当其他答案已经得到高票支持的情况下。 - Michael Freidgeim
如果他在房子/公寓楼周围跑了三圈,然后重新启动解决了问题,你会点赞这个答案吗?如果它的票数是0而不是-1,你会点赞吗?当你思考这个问题时,它并没有太多意义。 - Ruben Bartelink
1
我只是为了弥补你的踩票而点赞。对新用户要友好。顺便说一句,经常重新启动有帮助,但我从未尝试在公寓楼周围跑超过两次 :)。 - Michael Freidgeim
4
这有点老了...... 但是为了Woony的辩护...... 9个月后,这就解决了我的问题。 - Johnrad
显示剩余3条评论

3

我的问题与众不同,我调用了一个Web服务后收到了这个消息。

然后我将目标从.Net Framework 4.0更改为.Net Framework 2.0,并重新引用了我的WebService。做了一些更改后,问题得到了解决。没有错误,一切正常运行。

希望这可以帮到你!


10
几个变化是什么? - Michael Freidgeim
@MichaelFreidgeim 这对我来说是一个旧问题。但据我记得,当我更改我的框架生成的代理时,我进行了一些重构。这就是我所说的“一些更改”的意图。 - Davut Gürbüz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接