我刚刚检查了从 Subversion 到新文件夹的修订。打开解决方案,我在运行时得到了这个:
无法加载文件或程序集“xxxx”或其依赖项之一。试图加载格式不正确的程序。
这是我不久前检查过的相同代码。为什么现在要这样做?我现在还在那个 xxx 项目的 bin 文件夹中看到了 Debug x86 而不仅仅是 Debug。什么是 Debug x86,为什么我不像以前在 bin 文件夹中那样只使用 Debug?
1.
Could not load file or assembly … An attempt was made to load a program with an incorrect format (System.BadImageFormatException) , 2.
Could not load file or assembly exception & 3.
“An attempt was made to load a program with an incorrect format” even when the platforms are the same
听起来项目的一部分是为 x86 构建的,而其余部分是为任何 CPU/x64 构建的。这也咬到我了。您正在运行 x64(或呃... IA64)吗?
检查项目属性并确保正在为“任何 CPU”构建所有内容。如果您在 Visual Studio 中,您可以通过转到屏幕顶部工具栏上的“x86”或“任何 CPU”菜单(在“调试”/“发布”菜单旁边)并单击来检查所有内容“配置管理器……”
如果在 64 位服务器上以 IIS 7+ 运行站点时出现此错误,您可能有 32 位程序集,并且您的应用程序池将选项“启用 32 位应用程序”设置为 False;将此设置为 true 并重新启动站点以使其正常工作。
尝试使用可怕的 Business Objects 4 for .Net SDK 时出现此错误。
他们提供了五个 BusinessObjects*.dll 文件,但它们都是 64 位的。
要加载我的网页,我需要单击 Tools\Options,然后在 VS2013 中更改此设置:
https://i.stack.imgur.com/vpDnH.png
inetmgr 然后进入应用程序池-> 池的高级设置-> 将“启用 32 位应用程序”选项设置为 true;并重新启动 IIS。再检查一遍。!
在 IIS 上运行的应用程序上的 BadImageFormatException(不是从 VS 运行,因为 Visual Studio 通过使用“任何 CPU”的构建解决了问题)可能是由以下原因引起的:
该站点是一台 x64 的服务器,并且应用程序池的启用 32 位应用程序的默认设置为 False。你有 32 位程序集
在 Visual Studio 级别上,修复是:
将项目设置“目标 CPU”更改为“ANYCPU”
确保验证“首选 32 位”的设置。在我的情况下,Visual Studio 2012 默认检查此设置。在我取消选中“首选 32 位”之前,尝试使用外部 DLL 中的任何内容都失败了。
https://i.stack.imgur.com/UZYOZ.png
对于为 x86 兼容性而不是任何 CPU 构建的某些项目,这绝对是一个问题。如果我不得不猜测,我会说您的项目之间的一些引用可能是引用某些 bin\debug 文件夹中的 dll,而不是项目引用。
当为 x86 而不是“任何 CPU”编译项目时,dll 进入 bin\x86\debug 文件夹而不是 bin\debug (这可能是您的参考资料正在寻找的地方)。
但无论如何,您应该在项目之间使用项目引用。
https://i.stack.imgur.com/sMliZ.png
在我的情况下,它通过转到项目属性并在目标框架下工作,我选择了 .NET Framework 4。这是因为我已经移动到一台新机器上,该机器已经安装了其他更高的 .NET 框架,并且项目默认选择了它们。查看适合您的目标框架。