BadImageFormatException:无法加载文件或程序集...格式错误 - 仅适用于Web应用程序

时间:2013-02-08 11:38:52

标签: c# asp.net visual-studio web-applications dll

我正在使用多个现有库在Windows 8 64位计算机上处​​理Web应用程序。我想使用引用一个本机DLL的两个C#DLL。两个C#DLL都编译为64位使用,并在测试应用程序中进行测试。 我的Web应用程序引用了两个C#DLL,并且应该在IIS 8上运行。 我将两个C#DLL作为项目的引用和本地DLL手动添加到Web应用程序的bin文件夹中。每当我构建并运行解决方案时,我都会得到标题中显示的异常。 我知道这是在一个进程中运行32位和64位代码的问题的标志。因此,我尝试了所有不同的构建配置,但结果从未改变。

我创建了一个控制台应用程序正在完成我正在尝试的Web应用程序,它运行完美。 具有完全相同设置的Web应用程序会抛出异常,这对我来说真的很混乱。

到目前为止我尝试了什么:

  • 将应用程序池设置更改为“启用32位应用程序”
  • 使用任何CPU,64位或x86目标构建所有DLL
  • 检查所有DLL的corflag

我可以向愿意帮助我运行此配置的每个人提供项目导出!

我非常感谢你们的帮助!

3 个答案:

答案 0 :(得分:0)

我认为您尝试过设置Target Platform(项目属性中的Build选项)? 另外,看看这篇文章: http://www.codeproject.com/Articles/383138/BadImageFormatException-x86-i-x64

答案 1 :(得分:0)

我在申请时遇到了同样的问题。我执行以下操作后修复:

*授予我的网站文件夹中“匿名”用户的权限 *将应用程序池从“.NET v4.5 Classic”更改为“.NET v4.5”。

答案 2 :(得分:0)

我所能提供的只是帮助确定什么是不加载。如果它是开发服务器,则安装适当的sdk以使用Fusion Log Viewer可能是值得的。如果这不是一个选项,您可以按如下方式从注册表打开程序集绑定日志记录:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion]
"LogFailures"=dword:00000001
"LogPath"="c:\\bindFailureLogs\\"

确保在完成后将其关闭,使用程序集绑定日志记录会降低性能。在输入注册表项并重新启动应用程序的应用程序池以启动日志记录之前,请确保该文件夹存在。这将为您提供一个详细的列表,列出了什么dll(或依赖,因为它不是很明显,如果它的依赖性或错误消息中列出的dll)没有加载,它尝试的位置从中加载。

修复问题的应用程序的分区表明,针对不同版本的程序集存在多个依赖关系,并且由于只能将单个版本的程序集加载到应用程序域中,因此某些依赖关系不会得到满足。对于托管程序集,您可以使用assembly binding redirect,但我不知道如果它存在,那将是非托管等效项。