【问题标题】:Updating Oracle 12.1 to 12.2 Oracle Dependency Error occurs将 Oracle 12.1 更新到 12.2 发生 Oracle 依赖错误
【发布时间】:2018-05-01 07:52:18
【问题描述】:

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

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

现在问题来了,因为更新到 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 ---

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

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

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

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

  • Oracle 12.2 至少需要 .NET Framework 4.5.2 我们的服务器有 4.6 及更高版本
  • dll 的权限设置正确,可以被 IIS 使用
  • 我们在“高级设置”窗口中为我们的 x86 Web 应用程序启用了 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

感谢阅读希望有人可以帮助我们。

问候乐华

【问题讨论】:

    标签: c# .net oracle dll odp.net


    【解决方案1】:

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

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

    要么

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

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

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

    • 缺少 DLL -> 对此我无能为力,请进行正常的 Oracle 安装
    • 路径设置错误。 -> 确保%ORACLE_HOME%%ORACLE_HOME%\bin
    • 您是如何检查 GAC 的?你用的是gacutil.exe 4.0版吗?旧版本 3.5 不显示 4.0(及更高版本)程序集。
    • 您可能与 32 位与 64 位 Oracle 安装存在冲突。如果您同时需要它们,请按照以下安装说明进行操作:BadImageFormatException. This will occur when running in 64 bit mode with the 32 bit Oracle client components installed
    • ODP.NET 的版本与安装的 Oracle 客户端的版本不匹配。两者的主要版本(例如 11.1、11.2、12.1、12.2)必须相同。

    您也可以使用Process Monitor 工具,以查看缺少哪个 DLL 和/或注册表项。

    【讨论】:

    • 为什么您认为不安装 Oracle 客户端是个坏主意?我们认为更新我们的应用程序更容易,而 Oracle 版本没有任何问题。这仍然没有说明为什么我们的桌面应用程序可以工作而 Web 应用程序不能。另外我用了最新的GAC版本检查,也清除了临时缓存文件。
    • 我认为这对您来说会更容易,并且您当前的问题可能不会出现。您是否仔细检查了我列出的项目?
    • 是的,我们做到了,疯狂的是这一切都适用于 4.12.1 版本!唯一不同的是 dll 版本
    • 尝试使用进程监视器进行分析。或使用此工具验证 Oracle 安装:codeproject.com/Tips/1066432/Verify-Oracle-Client-Installation
    猜你喜欢
    • 2018-11-22
    • 2021-05-01
    • 2017-02-06
    • 2011-09-16
    • 1970-01-01
    • 1970-01-01
    • 2013-12-17
    • 2022-08-17
    • 2017-02-04
    相关资源
    最近更新 更多