更新Oracle 12.1到12.2发生Oracle依赖性错误

时间:2017-11-17 13:58:13

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

我们最近一直在努力用新的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起我们收到防火墙例外消息,如果我们不允许我们的桌面应用程序连接到互联网。 我们没有在Oracle 12.1或更低版本中获得该消息。 Add firewall rule

我们已经发布了我们的web应用程序与所有新的Oracle dll(与桌面相同的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: Our oracle dll's

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

有更多的人在努力解决这个问题,这是我们迄今为止所发现的:

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

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

我们的服务器规格:

  • Windows Server 2012R2 DataCenter(干净)
  • 基于X64的电脑
  • 使用IIS 8.5

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

问候Leroy

1 个答案:

答案 0 :(得分:0)

  

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

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

要么

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

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

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

  • 缺少DLL - >为此,我无法帮助您,进行正常的Oracle安装
  • 错误的路径设置。 - >确保{/ 1}}和%ORACLE_HOME%位于
  • 您是如何查看GAC的?你使用%ORACLE_HOME%\bin 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和/或注册表项。