【问题标题】:Error using oracle.dataaccess.dll使用 oracle.dataaccess.dll 时出错
【发布时间】:2011-01-07 05:47:58
【问题描述】:

我有一个使用 Oracle.DataAccess.dll 与 Oracle 数据库通信的 Web 应用程序。 部署在 32 位 windows 系统上的 web 应用程序可以工作,但不能在 windows server 2008 64 位上运行。我安装了 10204_vista_win2k8_x64_production_db 包,从项目中引用了已安装的 dll(版本 2.102.4.0),但出现以下错误:

无法加载文件或程序集“Oracle.DataAccess, Version=2.102.4.0, Culture=neutral, PublicKeyToken=89b483f429c47342”或其依赖项之一。系统找不到指定的文件。

【问题讨论】:

    标签: .net windows oracle 64-bit odp.net


    【解决方案1】:

    如果您无法使用 32 位 oracle 客户端并安装 64 位,则需要安装 64 位客户端,并从 oracle 客户端安装文件夹中获取 odp.net 下的 oracle.dataaccess.dll 文件。你必须使用这个 dll 并交换对这个文件的引用,而不是使用 32 位 dll。(这可能是你项目/解决方案所拥有的)

    如果您有不同的 oracle 客户端,它将无法正常工作。所以你会得到这样的错误。 希望对您有所帮助。

    参见插图 Implementing Oracle.Web.dll, Oracle.DataAccess.dll 64-bit failed on Windows Server 2008 with IIS 7.5 32-bit disabled

    【讨论】:

      【解决方案2】:

      如果您执行以下操作,一切正常 1. 始终将所有 dll 设置为 AnyCPU。 2. 确保在将运行可执行文件的机器上安装了适当版本的 dll(即 32 位或 64 位,即与操作系统相同) 3. 忽略正在使用 64/32 位版本而不是 MSIL 版本的编译器警告

      只要安装了适当版本的 oracle dll,编译后的版本就可以在 32 位和 64 位上使用。

      【讨论】:

        【解决方案3】:

        如果您使用的是 32 位版本的 Oracle.DataAccess.dll,那么您需要执行以下操作之一:

        a) 部署到 32 位服务器,或

        b) 部署到 64 位服务器,并将“启用 32 位应用程序”设置为“真”。

        如果您使用的是 64 位版本的 Oracle.DataAccess.dll,那么您只需使用 64 位服务器。

        问题是由 Oracle 引起的,因为它不提供任何 CPU 版本的 Oracle.DataAccess.dll(可能是因为它具有非托管/本机部分)

        【讨论】:

        • 因此,要使其在 Visual Studio 2012 / .NET 4.5 中正常工作(没有编译器警告),您需要将最终引用 Oracle.DataAccess.dll 的 dll 引用“链”设置为 x86 或AMD64(而不是 AnyCPU)取决于您使用的是 32 位还是 64 位版本的 Oracle DLL,然后确保您将应用程序部署到 32 位/模式或 64 位服务器跨度>
        • 或者您的另一个选择是忽略警告(并保留在 AnyCPU 上),然后根据您是否在 Oracle.DataAccess.dll 的 32 位/64 位版本之间换入/换出将您的应用重新部署到 32 位服务器/模式或 64 位服务器。
        • “您必须将项目的目标处理器更改为这些 cpu 之一。不幸的是,Oracle 没有 MSIL 版本,因此您无法将目标设置为 AnyCPU”code.msdn.microsoft.com/windowsdesktop/…
        【解决方案4】:

        这里也一样。 Oracle.DataAccess 程序集不在 64 位模式下运行。

        您应该将站点的应用程序池设置为 32 位模式(转到应用程序池的高级设置并将允许 32 位应用程序设置为“True”)

        如果这不起作用,请确保您的 Oracle 目录(包含所有 Oracle dll 的目录)在您的系统路径中。如果您忘记了这一点,您会收到关于找不到 Oracle.DataAccess 的同样神秘错误。

        编辑

        安装 Oracle 客户端可能会很痛苦。使用Oracle Instant Client 比安装完整客户端要容易一些,所以我通常这样做:

        1. 下载Oracle Instant Client
        2. 将存档解压缩到 c:\oracle(任何其他目录都可以)
        3. 以管理员身份打开命令提示符
        4. 类型 cd \oracle
        5. 类型 配置 odp.net20 myhome
        6. 右击“我的电脑”、“高级系统设置”、“环境变量”,将C:\oracle目录添加到系统路径
        7. 将 Oracle.DataAccess.dll 文件从 c:\oracle\odp.net\bin\2.x 复制到应用程序的 bin 文件夹中
        8. (可选)编辑您的 c:\oracle\tnsnames.ora 文件

        【讨论】:

        • 我将启用 32 位应用程序设置为 true,但没有运气。我收到相同的错误消息。我还能做什么?
        • 嗨 Leybaert,“确保您的 Oracle 目录(包含所有 Oracle dll 的目录)在您的系统路径中”到底是什么意思?我安装了 ODAC 1020221,它将 dll 安装到以下目录:e:\oracle\product\10.2.0\client_1\ODP.NET\bin\。奇怪的是,这个安装没有将 dll 注册到 GAC 中,所以我通过其绝对路径明确引用了项目中的 dll。无论如何,我收到了我在上一篇文章中提到的相同错误消息。我做错了什么?
        • GRRRR。对于这样一个简单的更改,一组多么蹩脚的错误消息。打开 32 位应用程序为我解决了这个问题。
        • “Oracle.DataAccess 程序集不能在 64 位模式下运行”不再正确——请参阅文章 stackoverflow.com/questions/29570523/…
        【解决方案5】:

        我将根据我刚刚在 64 位操作系统 Windows Server 2008 R2 上的经历为您提供答案。给我的应用程序套件是使用 .net 3.5 x86 和较旧的 DLL 库开发的,我被卡住了,因为我从 oracle 安装了较新的 x64 客户端。

        我发现如下: 从 Oracle 为 Windows Server 2008 安装最新的 x64 客户端。我相信这将是 2.7.0 客户端。选择安装时,请确保执行自定义并选择 .NET 库。 配置您的 tnsnames 文件并针对您的数据源测试您的 tnsping。

        接下来,如果您运行的是 32 位应用程序,请安装相同版本的 32 位客户端。另外,按照相同的安装程序,选择相同的主页。

        完成后,您会发现您有一个应用程序/产品,其中包含两个客户端目录(Client1 和 Client2)。

        如果您导航到 windows/assemblies 目录,您会发现您有一个对 Oracle.DataAccess.dll (x2) 的引用,其中一个用于 x86,一个用于 AMD64。

        现在,取决于您是否有开发人员或自己在机器上进行开发,您在这里可能没问题,但是,如果他们使用的是较旧的驱动程序,那么您需要执行最后一步。

        导航到 app\name\product\version\client_1\odp.net\publisher policy\2.x 目录。这里包括两个策略文件。使用 gacutil /i 将 Policy.2.111.Oracle.DataAccess.dll 安装到 GAC 中。这会将旧的 oracle ODP 调用重定向到较新的版本。所以,如果有人用 10g 客户端开发,现在可以用 11 客户端了。

        如果您需要更多详细信息,或者需要回答其他问题,例如在您的 .net 程序集上打开或关闭 32 位模式,请给我发电子邮件。

        J 班克斯 jbanks27@hotmail.com

        祝你好运。

        【讨论】:

          猜你喜欢
          • 2017-10-16
          • 2016-04-11
          • 2011-04-06
          • 2011-05-28
          • 1970-01-01
          • 2019-04-10
          • 1970-01-01
          • 2011-10-15
          • 2012-03-18
          相关资源
          最近更新 更多