我试图使用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 }}。
答案 0 :(得分:0)
尽管依赖项仅显示netstandard 2.0
,但我怀疑该软件包可在.net core
Linux上运行。它似乎与.net famework
有一些依赖关系。 Unable to load DLL 'oci'这里还有一个未解决的问题。
ms docs
上的一个也仅适用于.net framework
。看到这里:System.Data.OracleClient