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

Posted

技术标签:

【中文标题】BadImageFormatException:无法加载文件或程序集......格式错误 - 仅适用于 Web 应用程序【英文标题】:BadImageFormatException: Could not load file or assembly ... bad format - Only with Web Application 【发布时间】:2013-01-24 04:03:25 【问题描述】:

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

我创建了一个控制台应用程序,完全按照我在 Web 应用程序中所尝试的方式工作,并且它运行良好。 然而,具有完全相同设置的 Web 应用程序会引发异常,这让我非常困惑。

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

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

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

我真的很感激每一点帮助!

【问题讨论】:

您对此有任何解决方案吗?因为我们也遇到了同样的问题,直到现在我们还没有找到可行的解决方案。 嗨,赛义德,很抱歉我迟到的回答。由于我的项目是一个 Web 应用程序,因此我决定创建第二个 Web 应用程序作为 Web 服务,它可以通过 REST 提供本机 dll 的功能。我没有找到任何其他解决方案。 【参考方案1】:

我想您尝试过设置目标平台(项目属性中的构建选项)? 另外,看看这篇文章: http://www.codeproject.com/Articles/383138/BadImageFormatException-x86-i-x64

【讨论】:

嗨 Erkan,是的,我尝试了所有不同的目标平台设置。遗憾的是,您链接的文章并没有真正帮助,因为 corflags 不适用于非托管 dll:/【参考方案2】:

我的申请遇到了同样的问题。在我执行以下操作后它已修复: * 为我的网站文件夹中的“匿名”用户授予权限。 * 将应用程序池从“.NET v4.5 Classic”更改为“.NET v4.5”。

【讨论】:

【参考方案3】:

我所能提供的只是帮助确定哪些内容没有加载。如果它是开发服务器,则可能值得安装适当的 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,但我不知道如果它存在的话,它的非托管等价物会是什么。

【讨论】:

以上是关于BadImageFormatException:无法加载文件或程序集......格式错误 - 仅适用于 Web 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

WCF 服务 BadImageFormatException

BadImageFormatException 未处理

System.BadImageFormatException:如何修复 .NET 版本不匹配?

System.BadImageFormatException

.NET 程序集中 BadImageFormatException 的替代原因?

System.BadImageFormatException:无法加载文件或程序集(来自 installutil.exe)