0

我尝试使用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 不是必需的,详细信息请参见此处

4

1 回答 1

0

即使依赖项只显示netstandard 2.0我怀疑该包是否适用于.net corelinux。它似乎对.net famework. 这里还有一个未解决的问题Unable to load DLL 'oci'

此外,上的一个ms docs仅适用于.net framework. 见这里:System.Data.OracleClient

于 2018-12-24T16:10:29.750 回答