【发布时间】: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 在那里。我们还将它放在不同的位置,看看这是否可行,但不行。
奇怪的是,当我们将桌面应用程序复制到服务器时,桌面应用程序运行良好!桌面应用程序具有与 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