2013-02-08 55 views
6

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

我创建了一个控制台应用程序,完全按照我在网络应用程序中所做的操作完成,并且工作完美无瑕。 然而,具有完全相同设置的Web应用程序会引发异常,这对我来说真是令人困惑。

我试过到目前为止:

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

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

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

+0

你有任何解决方案还为这个?因为我们也遇到同样的问题,直到现在我们还没有找到工作解决方案。 – 2013-05-15 03:49:15

+0

嗨,Saeed,很抱歉,我迟到的答案。由于我的项目是一个Web应用程序,因此我决定创建第二个Web应用程序作为web服务,通​​过REST提供本地dll的功能。我没有找到任何其他解决方案来解决这个问题。 – JZet 2013-09-11 11:24:54

回答

0

我在我的应用程序得到同样的问题。在执行以下操作后,它被修复:

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

0

我可以提供的一切帮助确定什么是不加载。如果它是一个dev服务器,则可能需要安装相应的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,但如果它存在,我不知道它的非托管等价物是什么。

相关问题