System.DllNotFoundException:部署到Docker Linux容器时无法加载DLL'oci'

时间:2018-12-24 13:45:41

标签: c# docker dll asp.net-core-mvc system.data.oracleclient

我试图使用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,IntPtrz,IntPtr mfreep,IntPtr mfreep

当我尝试再次运行零件时,错误变为:

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时,必须将名为TZ的环境变量设置为docker linxu容器,但在版本2.12.0-beta3中则不需要TZ,有关详细信息,请参见{{3 }}。

1 个答案:

答案 0 :(得分:0)

尽管依赖项仅显示netstandard 2.0,但我怀疑该软件包可在.net core Linux上运行。它似乎与.net famework有一些依赖关系。 Unable to load DLL 'oci'这里还有一个未解决的问题。

ms docs上的一个也仅适用于.net framework。看到这里:System.Data.OracleClient