System.DllNotFoundException:部署到 Docker Linux 容器时无法加载 DLL 'oci'
System.DllNotFoundException: Unable to load DLL 'oci' when deployed to a Docker Linux container
我尝试使用 System.Data.OracleClient 连接 oracle 数据库。我的 .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] 在 :0
在 System.Data.OracleClient.OracleConnection.Open () [0x00000] 在 :0
如有任何建议,我们将不胜感激。
更新:
我删除了 System.Data.OracleClient 并使用了 Oracle.ManagedDataAccess.Core,错误消失了。
需要注意的是,当使用Oracle.ManagedDataAccess.Core 2.18.3 版本时,你必须为docker linxu 容器设置一个名为TZ 的环境变量,但在2.12.0-beta3 版本中TZ 不是必需的,详情你可以参见 。
尽管依赖项只显示 netstandard 2.0
,但我怀疑该包是否适用于 .net core
linux。它似乎对 .net famework
有一些依赖性。这里还有一个未解决的问题 Unable to load DLL 'oci'。
此外 ms docs
上的那个仅适用于 .net framework
。看这里:System.Data.OracleClient
我尝试使用 System.Data.OracleClient 连接 oracle 数据库。我的 .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] 在 :0 在 System.Data.OracleClient.OracleConnection.Open () [0x00000] 在 :0
如有任何建议,我们将不胜感激。
更新:
我删除了 System.Data.OracleClient 并使用了 Oracle.ManagedDataAccess.Core,错误消失了。
需要注意的是,当使用Oracle.ManagedDataAccess.Core 2.18.3 版本时,你必须为docker linxu 容器设置一个名为TZ 的环境变量,但在2.12.0-beta3 版本中TZ 不是必需的,详情你可以参见
尽管依赖项只显示 netstandard 2.0
,但我怀疑该包是否适用于 .net core
linux。它似乎对 .net famework
有一些依赖性。这里还有一个未解决的问题 Unable to load DLL 'oci'。
此外 ms docs
上的那个仅适用于 .net framework
。看这里:System.Data.OracleClient