更新 Oracle 12.1 到 12.2 出现 Oracle 依赖错误

Ler*_*jer 6 .net c# oracle dll odp.net

我们最近一直在努力使用新的 Oracle dll 更新我们的 C# 应用程序。我们为多个平台创建我们的软件。所以我们的软件解决方案既是一个 winform 桌面应用程序,也是一个 ASP.NET MVC web 应用程序。

这两个应用程序都可以完美地独立运行 Oracle 12.1。我们在重新分发我们的软件时添加了所有必要的 Oracle dll。因此,桌面应用程序在 MSI 中包含所有 dll,而网站的发布在 ~\Bin 中包含所有 dll。确保当网站托管在 IIS 上时,web 应用程序运行。这样我们的客户就不需要安装 Oracle Client。

现在问题来了,因为更新到 Oracle 12.2,我们不可能再运行 web 应用程序了。桌面应用程序仍然运行良好,尽管从 Oracle 12.2 开始,如果我们不允许桌面应用程序连接到 Internet,我们会收到防火墙异常消息。我们在 Oracle 12.1 或更低版本中没有收到该消息。 添加防火墙规则

我们已经使用所有新的 Oracle dll 发布了我们的 web 应用程序(与桌面相同的 dll,与 web 应用程序具有 Oracle 12.1 时的方式相同),从那时起我们无法再连接到我们的 Oracle 数据库。我们得到以下错误:

Unable to load DLL 'OraOps12.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E)

System.TypeInitializationException: The type initializer for 'Oracle.DataAccess.Client.OracleConnection' threw an exception. ---> System.DllNotFoundException: Unable to load DLL 'OraOps12.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E)
   at Oracle.DataAccess.Client.OpsInit.CheckVersionCompatibility(String version)
   at Oracle.DataAccess.Client.OracleInit.Initialize()
   at Oracle.DataAccess.Client.OracleConnection..cctor()
   --- End of inner exception stack trace ---
Run Code Online (Sandbox Code Playgroud)

我们已经检查过,但是是的,dll 在那里。我们还把它放在不同的位置,看看这是否可行,但不行。

这些是我们正在使用的dll: 我们的 oracle dll

奇怪的是,当我们将桌面应用程序复制到服务器时,桌面应用程序运行良好!桌面应用程序与 Web 应用程序具有完全相同的 dll!我们用于桌面和 web 应用程序的 dll 来自 Oracle 的 XCopy 文件夹:http : //download.oracle.com/otn/other/ole-oo4o/ODAC122010Xcopy_32bit.zip x86 http://download.oracle.com/ otn/其他/ole-oo4o/ODAC122010Xcopy_x64.zip x64

有更多的人在为这个问题而苦苦挣扎,这是我们目前发现的:

  • Oracle 12.2 至少需要 .NET Framework 4.5.2 我们的服务器有 4.6 及更高版本
  • dll 的权限设置正确并且可以被 IIS 使用
  • 我们在“高级设置”窗口中为 x86 网络应用程序启用了 32 位应用程序
  • 我们已经设置了环境,确保将正确的 dll 添加到环境中
  • 在 Visual Studio 中,我们确保引用是: 如果较新和本地副本设置为 true,则复制
  • 我们的应用程序是完整的 x86 或 x64,而不是任何 CPU 构建。
  • 我们已经检查了我们的 Regedit、Machine.config 和 GAC 是否有任何其他 Oracle 版本的可能遗留问题。
  • 重新下载 xcopy zip 并再次复制文件
  • 服务器已禁用防火墙(开发)

Oracle.DataAccess.Client Dependencies这或多或少是我们的方法!

我们的服务器规格:

  • Windows Server 2012R2 数据中心(干净)
  • 基于 X64 的电脑
  • 使用 IIS 8.5

感谢阅读,希望有人能帮助我们。

问候勒罗伊

Wer*_*eit 0

这样我们的客户就不需要安装Oracle Client。

我认为这是一个坏主意,我不建议这样做。

任何一个

  • 要求您的客户使用标准 Oracle 下载自行安装 Oracle 客户端(包括 ODP.NET 提供程序)

或者

  • 使用 ODP.NET 托管驱动程序,则无需任何进一步安装。您只需提供Oracle.ManagedDataAccess.dll您的申请即可。

在没有进一步信息的情况下很难确定您的问题,可能有以下几个原因:

  • 缺少 DLL -> 为此我无法帮助您,请进行正常的 Oracle 安装
  • 路径设置错误。-> 确保%ORACLE_HOME%并且%ORACLE_HOME%\bin
  • 您如何检查您的 GAC?你用的是gacutil.exe4.0版本吗?旧版本 3.5 不显示 4.0(及更高版本)程序集。
  • 您可能会遇到 32 位与 64 位 Oracle 安装的冲突。如果您需要两者,请遵循以下安装说明:BadImageFormatException。当在安装了 32 位 Oracle 客户端组件的 64 位模式下运行时,会发生这种情况
  • ODP.NET 的版本与安装的 Oracle 客户端的版本不匹配。两者的主要版本(例如11.1、11.2、12.1、12.2)必须相同。

您还可以使用进程监视器工具来查看缺少哪个 DLL 和/或注册表项。