我尝试使用System.Data.OracleClient连接oracle数据库。我的.net核心应用程序在vs2017和IIS中运行良好,但当我部署到Linux容器并运行从数据库获得连接的部分时,我会收到以下错误:
System.DllNotFoundException:无法加载DLL"oci":找不到指定的模块。(HRESULT:0x8007007E中的异常)位于System.Data.OracleClient.Oci.Oci.AcciCalls.OciNativeCalls.OCIEvCreate(IntPtr&envhpp,OciEnvironmentMode模式,IntPtr ctxp,IntPtr-malocp,IntPtr-ralocfp,IntPter-mfreep,Int32 extreme_sz,IntPtr/usrmempp)
当我再次尝试运行运行部件时,错误变成:
System.NullReferenceException:对象引用未设置为对象的实例位于0中的System.Data.OracleClient.OracleConnectionPool.GetConnection()[0x0000]在0 中的System.Data.OracleClient.OracleConnection.Open()[0x0000]处
如有任何建议,我们将不胜感激。
更新:我删除了System.Data.OracleClient并使用了Oracle.ManagedDataAccess.Core,错误消失了。需要注意的是,当使用Oracle.ManagedDataAccess.Core版本2.18.3时,您必须将一个名为TZ的环境变量设置为docker linxu容器,但在版本2.12.0-beta3中,TZ是不必要的,详细信息请参阅此处。
尽管依赖项只显示netstandard 2.0
,但我怀疑该包能否在.net core
linux上运行。它似乎与.net famework
有一些依赖关系。这里还有一个悬而未决的问题无法加载DLL"oci"。
此外,ms docs
上的一个仅可用于.net framework
。请参阅此处:System.Data.OracleClient