无法加载文件或程序集"Oracle.DataAccess"或其依赖项之一

Anj*_*li5 36 iis visual-studio-2010 oracle11g

我正在尝试运行此Web应用程序.我一直收到此错误"无法加载文件或程序集"Oracle.DataAccess"或其依赖项之一.尝试加载格式不正确的程序." 异常详细信息:System.BadImageFormatException."无法加载文件或程序集"Oracle.DataAccess"或其依赖项之一.尝试加载格式不正确的程序." 以下是我已经尝试过的事情.

1)用32位oracle dll替换所有oracle dll,即2.112.3.0

我在64位机器上安装了32位客户端.操作系统是Windows 7.

2)单独编译每个单独的项目.删除所有oracle依赖文件dll,然后单独添加2.112.3.0 dll,然后编译每个项目

3)使用此语句在GAC上注册32位dll gacutil/i%ORA_HOME4%\ odp.net\bin\4\Oracle.DataAccess.dll

gacutil/i%ORA_HOME4%\ asp.net\bin\4\oracle.web.dll

对于上述两个语句,我将gacutil.exe从c:\ Program Files(x86)\ Microsoft sdk\windows\v7.0A\Bin\NETFX4.0 Tools\X64复制到C:\驱动器然后

我执行了以上两个声明:

gacutil/i%ORA_HOME4%\ odp.net\bin\4\Oracle.DataAccess.dll gacutil/i%ORA_HOME4%\ asp.net\bin\4\oracle.web.dll当我执行上述两个语句时,我没有没有任何消息,我在管理员权限下在Dos窗口中执行它们.

4)我还从这个位置删除了所有临时ASP.net文件

c:\ windows\Microsoft.Net\V4.0.30319 \临时ASP.net文件我还将Web应用程序构建平台目标更改为X86,原来,它位于"ANy CPU".出于沮丧,我也尝试将平台目标更改为X64然后我收到错误消息说

"冷不加载文件或汇编.webapp"或其依赖项之一.尝试加载格式不正确的程序.

我没有在我的计算机上安装IIS,我在visual studio 2010中运行此应用程序,所以我认为它将使用visual studio附带的内置IIS.

我花了很多时间来解决这个问题,但仍然一次又一次地得到同样的错误.

任何帮助或提示将受到高度赞赏.

小智 35

试试这个:打开IIS管理器,更改应用程序池的高级设置,将启用32位应用程序更改为false.

  • 默认情况下我的是假的,当我将它设置为true时,依赖性问题就消失了 (9认同)
  • 我需要 32 位,所以我将我的设置为 True,回收应用程序池,这对我有用。 (2认同)
  • 我需要停止/启动我的应用程序池。 (2认同)

小智 25

我找到了以下步骤的解决方案:

  • 删除Oracle.DataAcces.dll引用,
    并添加一个新的引用:
    C:\windows\assembly\GAC\Oracle.DataAccess\X.XXX.X.XX__89b483f429c47342/oracle.dataaccess.dll
  • 使本地copy = false.

希望能帮助到你

  • .NET Framework 3.5/4.5中的@RDeveloper GAC位于C:\ Windows\Microsoft.NET\assembly\GAC_32或C:\ Windows\Microsoft.NET\assembly\GAC_64下 (2认同)

Kif*_*lah 9

您可能需要在AppPool中启用32位应用程序.转到IIS中的"应用程序池"=>右键单击您的应用程序池=>高级设置=>'启用32位应用程序'为true.

请不要忘记重新启动应用程序池以及指向该应用程序池的相应应用程序.


ADH*_*ADH 7

如果您使用的是 IIS Express 和 VS 2017:

转到 Web 应用程序属性 > Web 选项卡 > 服务器部分 > 并将位数更改为 x64。

  • 这在 VS 2019 中对我也有效,以防其他人可能会发现它有用。 (2认同)

Kri*_*riZ 6

当我从一台机器转移到另一台机器并重新安装所有内容时,再次出现问题。就我而言,我同时使用 32 位和 64 位 Oracle ODP.NET 安装。

当列出我的新机器上的组件时,我最终得到了以下列表

 C:\oracle\product\11.2.0\X64\odp.net\bin\4>gacutil /l|findstr Oracle.DataAccess
     Oracle.DataAccess, Version=2.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=AMD64
     Policy.2.102.Oracle.DataAccess, Version=2.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=AMD64
     Policy.2.111.Oracle.DataAccess, Version=2.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=AMD64
     Policy.2.112.Oracle.DataAccess, Version=2.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=AMD64
     Oracle.DataAccess, Version=4.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=AMD64
     Policy.4.112.Oracle.DataAccess, Version=4.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=AMD64
Run Code Online (Sandbox Code Playgroud)

这里只能看到 64 位 DLL。

在此输入图像描述

我无法从 web.config 中看到它,但我使用的是 32 位版本。

当用 GACutil 检查我的旧机器时,我看到了更多的 DLL,还有 X86 的。

通过重新应用注册过程修复(此处引用的 x32/x64 版本)

OraProvCfg.exe /action:gac /providerpath:C:\oracle\product\11.2.0\x32\ODP.NET\bin\4\Oracle.DataAccess.dll

OraProvCfg.exe /action:gac /providerpath:C:\oracle\product\11.2.0\x64\ODP.NET\bin\4\Oracle.DataAccess.dll
Run Code Online (Sandbox Code Playgroud)

之后,Visual Studio 就像一只快乐的兔子,为我重新编译了所有内容。


Jef*_*ler 5

Oracle.DataAccess我在部署到 Azure 网站 (azurewebsites.net) 时遇到了同样的错误。对我来说,在发布到 Azure 之前,我必须在 VS.NET 2019 中编辑设置。我勾选了“对网站和项目使用 64 位版本的 IIS Express”复选框,该复选框位于Tools > Options > Projects and Solutions > Web Projects.