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



我尝试使用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 corelinux上运行。它似乎与.net famework有一些依赖关系。这里还有一个悬而未决的问题无法加载DLL"oci"。

此外,ms docs上的一个仅可用于.net framework。请参阅此处:System.Data.OracleClient

相关内容

  • 没有找到相关文章

最新更新