无法加载文件或程序集“xxx”或其某个依赖项。尝试使用不正确的格式加载程序。

197

我刚刚从Subversion检出一个版本到一个新文件夹。打开解决方案并运行时,出现以下错误:

无法加载文件或程序集“xxxx”或其某个依赖项。尝试加载格式不正确的程序。

这是我之前检入的同样的代码。为什么现在会出现这个错误?我现在还在该xxx项目的bin文件夹中看到Debug x86,而不是像以前一样只有Debug。Debug x86是什么,为什么我在bin文件夹中没有像以前一样只有Debug?


2
你尝试过执行“全部重建”吗?有时候这对我解决奇怪的依赖问题很有效... - mezoid
有关 Visual Studio 2022 中的错误,请参见此处 - fsbflavio
9个回答

252

听起来,项目的一部分仅针对x86构建,而其余部分则针对任何CPU / x64构建。这也影响了我。你正在运行x64(或者... IA64)吗?

请检查项目属性,确保所有内容都被构建为“任何CPU”。如果你在使用Visual Studio,则可以通过在屏幕顶部的工具栏上找到“x86”或“任何CPU”菜单(位于“调试”/“发布”菜单旁边),并点击“配置管理器...”来检查所有内容。


1
它也可以在项目->属性->生成或调试->属性->生成中找到。我刚刚更新了VS2015,版本号为14.0.25123.00 Update 2。这个更新是在5/10/16(昨天!)发布的。我发现平台目标设置为x64,导致了错误。将其设置为“任何CPU”即可解决问题。 - Michael D. O'Connor

181

如果你在64位服务器上使用IIS 7+运行网站时出现此错误,你可能有一些32位的程序集,并且你的应用程序池选项“启用32位应用程序”设置为False;将其设置为true并重新启动网站即可解决问题。


5
同意。这取决于错误发生的位置。如果是在Visual Studio和Cassini Web服务器中,Fraser是正确的。如果它出现在IIS7+中,Nicks的答案可能是最有可能的解决方法。 - Carl Heinrich Hancke
这对我来说是完美的答案(将一个网站从基于x86的IIS6迁移至基于x64的IIS7)。 - DrStalker
没错,这就是解决方法。我将一个网站从 x86 上的 IIS6 迁移到了 x64 上的 IIS 7。非常感谢! - Lukas

44

在尝试使用可怕的Business Objects 4 for .Net SDK时,我遇到了这个错误。

他们提供了五个BusinessObjects*.dll文件,但所有这些文件都是64位的。

为了使我的网页加载成功,我需要点击工具\选项,然后更改VS2013中的此设置:

输入图像描述


这个选项对我不可用。在Visual Studio 2010下,我在这个屏幕上唯一的选项是“对于新的基于文件的网站和项目使用IIS Express”。 - Drew Chapin
1
我在VS 2017专业版中有这个选项。 - Nathan

33

打开inetmgr后,进入“应用程序池”->找到您的应用程序池,进入“高级设置”->将选项“启用32位应用程序”设置为true;然后重启IIS。再次检查。


同意。我为我的站点创建了一个新的应用程序池,但忘记切换此设置。 - AlbatrossCafe
1
这对我也解决了问题。我需要改变的另一件事是将管道改为集成,因为在应用上述修复后,这也给了我一个错误。 - AxleWack

9

请确保您验证了“首选32位”的设置。在我的情况下,Visual Studio 2012默认勾选了此设置。在未取消“首选32位”之前,尝试使用来自外部DLL的任何内容都会失败。

enter image description here


7
在IIS上运行的应用程序(不是在VS中运行,因为Visual Studio通过使用“Any CPU”构建来解决问题)可能会出现BadImageFormatException错误,原因如下:
该站点位于x64服务器上,应用程序池的默认设置“启用32位应用程序”为False,并且您有32位组件。
在Visual Studio中,解决方法如下:
1.将项目设置中的“目标CPU”更改为“ANYCPU”。

4
这肯定是一些项目为了兼容x86而构建时出现的问题,如果我猜测的话,您的一些项目之间的引用可能在一些bin\debug文件夹中引用dll,而不是项目引用。

当一个项目被编译为x86而不是“任何CPU”时,dll会进入bin\x86\debug文件夹,而不是bin\debug(这可能是您的引用所在的位置)。

但无论如何,您应该在您的项目之间使用项目引用。


1
在我的情况下,我通过进入项目属性,在目标框架下选择.NET Framework 4来解决问题。这是因为我已经切换到一台新机器上,该机器已经安装了其他更高版本的.NET框架,并且项目默认选择了它们。请查看适合您的目标框架。

1

如果在使用IIS Express并且在Visual Studio中工作时发布失败,请尝试以下方法:在此输入图片描述


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