【问题标题】:Oracle.DataAccess.dll Providers and dll not compatibleOracle.DataAccess.dll Providers 和 dll 不兼容
【发布时间】:2016-06-01 15:50:07
【问题描述】:

我最近担任了应用程序开发人员,没有太多经验,我无法确定问题的根源。我已经搜索了论坛并且无法对我的具体问题得出结论性的答案,因此我提出了一个问题。如果我是这个网站的新手,如果冒犯任何人或违反任何规则,我提前道歉。

我有几个需要使用 oracle.dataaccess.dll 的应用程序。我已按照雇主的要求安装了 oracle 客户端 x32。当我尝试运行任何需要 oracle.dataaccess.dll 文件的应用程序时,我遇到了各种错误。

大多数应用程序使用 dll 的 4.xx.xx.xx 版本,它不会出现在我的 oracle 客户端中(我假设它是因为我安装了 32 位)。当我尝试使用 32 位版本时,出现各种错误:

  1. 提供程序与 Oracle 客户端版本不兼容

  1. 无法加载文件或程序集。 'Oracle.DataAccess.dll' 或其依赖项之一。尝试加载格式不正确的程序。

  1. 可能未安装提供程序。

如果我尝试使用生产服务器上使用的 oracle.dataaccess.dll,我会遇到同样的错误。

  1. 什么是“提供程序”,如何确定我安装了哪些?

  2. 我应该将这些 dll 中的任何一个存储在我的 GAC 中吗?

  3. 我完全不知道我需要从这里去哪里,因为我已经尝试了我所知道的一切。我什至卸载了我的 Oracle 客户端并重新安装,但无济于事。非常感谢任何可以为我提供好的教程或如何使用 oracle.dataaccess 的信息。

再次对任何麻烦表示歉意。

【问题讨论】:

  • 我遇到了同样的问题,具体取决于这是 Windows 还是 Web 应用程序。您需要在项目级别更改属性以构建应用程序,因为 x86 不要使用 @987654323 @它不会工作..通常它应该与设置为 AnyCpu 的构建一起工作。但是 Oracle 的 64 位客户端存在重大问题,因此我们使用了稳定的 32 位客户端,它的工作原理就像一个魅力,不要将这些存储在 GAC 中。将 using 语句添加到 .cs 文件的标题以及手动添加引用到项目
  • 将其添加到项目后,转到 dll 并更改 CopyLocal=false;l property to CopyLocal=true
  • 请检查以下答案:stackoverflow.com/questions/659341/…

标签: c# oracle dll oracle11g


【解决方案1】:

一些通用点:

  • ODP.NET(即Oracle.DataAccess.dll)需要安装 Oracle 客户端。独立 DLL 不起作用。
  • Oracle.DataAccess.dll 的体系结构(即 32 位与 64 位)必须与已安装的 Oracle 客户端的体系结构和您的应用程序的体系结构相匹配。
  • 版本(例如 2.x4.xOracle.DataAccess.dll)必须与应用程序的 .NET 编译目标匹配。如果您在目标 2.0、3.0 或 3.5 上编译,则必须安装版本 2.x。对于编译目标 4 或更高版本,您必须安装版本 4.x
  • 版本(例如x.111x.112x.121 等)应与安装的 Oracle 客户端的版本匹配。

关于您的问题:

提供程序是 DLL Oracle.DataAccess.dll。它可以是您应用程序二进制文件夹中的本地副本,也可以安装在 GAC 中。

您是否使用 GAC 并不重要。我个人更喜欢使用 GAC,但您也可以提供本地副本。 GAC 中的文件优先于本地文件(如果您想了解有关它的所有详细信息,请参阅How the Runtime Locates Assemblies

您可以使用gacutil.exe 工具查询已安装的提供程序:

C:\>gacutil /l Oracle.DataAccess
Microsoft (R) .NET Global Assembly Cache Utility.  Version 4.0.30319.18020
Copyright (c) Microsoft Corporation.  All rights reserved.

The Global Assembly Cache contains the following assemblies:
  Oracle.DataAccess, Version=2.112.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=AMD64
  Oracle.DataAccess, Version=2.112.4.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=AMD64
  Oracle.DataAccess, Version=2.112.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=x86
  Oracle.DataAccess, Version=2.112.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=x86
  Oracle.DataAccess, Version=2.112.4.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=x86
  Oracle.DataAccess, Version=4.112.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=AMD64
  Oracle.DataAccess, Version=4.112.4.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=AMD64
  Oracle.DataAccess, Version=4.112.4.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=x86

Number of items = 8

C:\>

【讨论】:

  • 我还想提一下,感谢您将我指向您以前的一篇文章。非常感谢您对 Wernfried 的帮助!
  • 当我安装我的 32 位客户端时(根据我的雇主),我导航到“client_1\odp.net\bin”文件夹,但我没有看到 4.x 文件夹,只有 2 个。 X。我需要使用 4.x dll,因为我在 4.x 的目标框架上为所有应用程序编译,但我不确定如果我的客户端没有安装它,如何找到它。有什么建议吗?提前致谢。
  • 您安装了哪个 Oracle 版本? ODP.NET 4.x(32 位)由 Oracle 版本 11.2.0.1.2 引入,请参阅 oracle.com/technetwork/topics/dotnet/utilsoft-086879.html。检查安装程序选项或手动安装 4.x 版。
  • 我安装了 11gR2 客户端。如果我需要手动安装,我该怎么做?非常感谢您的所有反馈。
  • 从这里下载“XCopy”版本:oracle.com/technetwork/database/windows/downloads/…。安装命令类似于install.bat ODP.NET4 C:\oracle\product\11.2\Client_x86 OraClient11g_home1
猜你喜欢
  • 1970-01-01
  • 2012-03-01
  • 1970-01-01
  • 2012-11-09
  • 2020-04-12
  • 2012-01-10
  • 2014-03-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多