46

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

  1. 将所有 oracle dll 替换为 32 位 oracle dll 即 2.112.3.0

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

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

  2. 使用此语句在 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 窗口中执行了它们。

  1. 我还从这个位置删除了所有 Temporary ASP.net 文件

c:\windows\Microsoft.Net\V4.0.30319\temporary ASP.net files 我还将 Web 应用程序构建平台目标更改为 X86,最初它位于“ANy CPU”。出于沮丧,我还尝试将平台目标更改为 X64,然后我收到错误消息说

“冷不加载文件或组装.webapp”或其依赖项之一。试图加载格式不正确的程序。

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

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

4

13 回答 13

41

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

于 2014-01-15T23:13:40.120 回答
27

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

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

希望能帮助到你

于 2014-09-05T10:58:17.683 回答
14

您可能需要在 AppPool 中启用 32 位应用程序。转到> IIS中的“应用程序池”=>右键单击您的应用程序池=>高级设置=>“启用 32 位应用程序”为真。

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

于 2016-10-04T19:09:26.377 回答
8

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

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

于 2018-06-19T19:07:42.670 回答
4

当我从一台机器移到另一台机器并重新安装所有东西时,再次出现问题。就我而言,我同时使用 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

这里只能看到 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

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

于 2016-07-28T13:20:58.017 回答
2

在我的情况下,以下解决了这个问题:

  1. 从http://www.oracle.com/technetwork/topics/dotnet/utilsoft-086879.html下载“使用 Oracle Developer Tools for Visual Studio 的 32 位 Oracle 数据访问组件 (ODAC)”
  2. 然后通过浏览文件位置或仅从选项卡中的引用列表添加对文件的oracle.dataaccess.dll引用。bin.NET
于 2016-04-24T08:14:57.577 回答
2

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

于 2020-02-25T00:02:43.463 回答
1

就我而言,我使用 VS 2010,Oracle v11 64 位。我可能会以 64 位模式发布(在 Web 项目配置中设置为“任何 Cpu”模式),我可能会将生产服务器上的 IIS 设置为 32 位兼容性为 false(因为服务器是 64 位的,我喜欢利用它)。

然后解决“无法加载文件或程序集'Oracle.DataAccess'”的问题:

  • 在本地 PC 和服务器中安装了 Oracle v11,64 位。
  • 在所有本地开发 PC 中,我引用了 64 位的 Oracle.DataAccess.dll (C:\app\user\product\11.2.0\client_1\odp.net\bin\4)。
  • 在 IIS 生产服务器中,我将 32 位兼容性设置为 False。
  • System.Web.Mvc.dll 的 Web 项目中的参考是本地 PC 中的版本 v3.0.0.1,但是在生产中仅安装了 MVC 版本 3.0.0.0。因此,该修复程序在本地使用 MVC 3.0.0.0 而不是 3.0.0.1 并在服务器上再次发布,并且可以正常工作。
于 2014-10-30T18:46:29.030 回答
0

您还可以从64-bit Oracle Data Access Components (ODAC) Downloads下载并执行“ODAC112030Xcopy.zip”中的 install.bat 文件。这解决了我的问题。

于 2014-09-17T13:43:33.670 回答
0

对我来说,其他一切都差不多,但不知何故我的项目设置发生了变化,并且使用 iisExpress 而不是 IISLocal。当我更改并指向虚拟目录(在 IISLocal 中)时,它再次完美地工作。

于 2017-04-25T13:56:36.640 回答
0

我需要一个 64 位版本的 oracle.dataaccess.dll 但这会导致我正在使用的其他库出现问题。

[BadImageFormatException:无法加载文件或程序集“Oracle.DataAccess”或其依赖项之一。试图加载格式不正确的程序。]

我按照上面的几个步骤。将在项目池上进行高级设置以切换允许 32 位工作,但我不满足于这样,所以我重新打开它。

我的项目也有依赖于Elmahlog4net参考的参考。我下载了这些的最新版本,我的项目能够正常构建和运行,而不会弄乱池的允许 32 位设置。

于 2018-10-08T18:03:45.837 回答
0

我遇到了同样的问题,并通过用新的Oracle.DataAccess.dll替换旧的Oracle.DataAccess.dll来解决(安装时带有 oracle 客户端)

在我的情况下,新Oracle.DataAccess.dll的路径是

  • E:\app\Rehman.Rashid\product\11.2.0\client_1\ODP.NET\bin
于 2019-09-30T11:28:50.960 回答
0

在我的情况下,我有一个控制台应用程序,我只是在 Build projet 属性选项卡上取消选中 Prefer 32-bit,然后将其添加到我的 app.config 中:

<runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
            <dependentAssembly>
                <assemblyIdentity name="Oracle.DataAccess" publicKeyToken="89b483f429c47342" culture="neutral" />
                <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="2.112.1.0" />
            </dependentAssembly>
        </assemblyBinding>
    </runtime>
于 2021-01-06T17:46:09.777 回答