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

6
我正在使用多个现有库在Windows 8 64位机器上开发Web应用程序。我想使用两个引用了一个本地DLL的C# DLL。这两个C# DLL都编译为64位使用,并在测试应用程序中进行了测试。我的Web应用程序引用了这两个C# DLL,并且应该在IIS 8上运行。我将这两个C# DLL作为项目的引用添加到bin文件夹中,并手动添加了本地DLL。每当我构建和运行解决方案时,就会出现标题中显示的异常。我知道这是32位和64位代码在一个进程中运行时的问题迹象。因此,我尝试了所有不同的构建配置,但结果从未改变。
我创建了一个控制台应用程序,完全按照我在Web应用程序中尝试的方式进行操作,它完美地工作。然而,具有完全相同设置的Web应用程序却抛出了异常,这让我非常困惑。
我迄今为止尝试过的方法:
- 更改应用程序池设置为“启用32位应用程序” - 使用Any CPU、64位或x86目标构建所有DLL - 检查所有DLL的corflags
我可以向每个愿意帮助我使此配置运行的人提供项目导出文件。
我真的很感激每一点帮助!

你们已经找到这个问题的解决方案了吗?因为我们也遇到了同样的问题,但是到目前为止还没有找到可行的解决方案。 - Saeed Neamati
嗨Saeed,抱歉回复晚了。由于我的项目是一个Web应用程序,我决定创建第二个Web应用程序作为Web服务,通过REST使本地dll的功能可用。我没有找到其他解决办法。 - JZet
3个回答

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,则不总是明显)以及尝试从哪里加载。

您对应用程序进行分区以解决问题表明,程序集有多个依赖项,针对不同版本,由于只能将单个版本的程序集加载到应用程序域中,因此某些依赖项无法满足。对于托管程序集,您可以使用程序集绑定重定向,但我不知道其非托管等效物是否存在。


0

1
嗨Erkan,是的,我尝试了所有不同的目标平台设置。你链接的文章很遗憾并没有真正帮助,因为corflags不能用于非托管dll:/ - JZet

0
我在我的应用程序上遇到了同样的问题。在执行以下操作后,问题得到了解决:

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


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