我尝试使用System.Data.OracleClient连接 oracle db。我的 .net 核心应用程序在 vs2017 和 IIS 中运行良好,但是当我部署到 Linux 容器并运行从数据库获取连接的部分时,我收到此错误:
System.DllNotFoundException:无法加载 DLL 'oci':找不到指定的模块。(HRESULT 异常:0x8007007E)在 System.Data.OracleClient.Oci.OciCalls.OciNativeCalls.OCIEnvCreate(IntPtr& envhpp,OciEnvironmentMode 模式,IntPtr ctxp,IntPtr malocfp,IntPtr ralocfp,IntPtr mfreep,Int32 xtramem_sz,IntPtr usrmempp)
当我尝试再次运行运行该部分时,错误变为:
System.NullReferenceException:对象引用未设置为 System.Data.OracleClient.OracleConnectionPool.GetConnection () [0x00000] in :0 at System.Data.OracleClient.OracleConnection.Open () [0x00000] in :0
任何建议将不胜感激。
更新:我删除了System.Data.OracleClient并使用了Oracle.ManagedDataAccess.Core,错误消失了。需要注意的是,当使用 Oracle.ManagedDataAccess.Core 2.18.3 版本时,您必须为 docker linxu 容器设置一个名为 TZ 的环境变量,但在 2.12.0-beta3 版本中,TZ 不是必需的,详细信息请参见此处。