6

我正在使用多个现有库在 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 的标志

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

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

4

3 回答 3

0

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

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

于 2014-02-11T19:42:06.727 回答
0

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

于 2013-02-19T10:18:04.567 回答
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 并不总是很明显)未加载以及尝试从何处加载它的详细列表。

您对解决问题的应用程序的分区表明,针对不同版本的程序集存在多个依赖项,并且由于只能将程序集的单个版本加载到应用程序域中,因此某些依赖项没有得到满足。对于托管程序集,您可以使用程序集绑定重定向,但我不知道如果它存在的话,它的非托管等效项是什么。

于 2014-09-06T14:52:23.757 回答