ODP.Net 驱动程序在 .NET Core 5.0 上抛出异常

Jas*_*n D 16 oracle odp.net-managed .net-5

我正在尝试将我的数据库应用程序从 .NET Core 3.1 移植到 .NET Core 5.0。

运行以下代码时,

        public async Task<List<T>> LoadDataFromSQL<T, U>(string sql, U parameters, string connectionStringName)
        {
            using (IDbConnection connection = new OracleConnection(await GetConnectionString()))
            {
                var rows = await connection.QueryAsync<T>(sql,
                                                          parameters,
                                                          commandType: CommandType.Text);
                return rows.ToList();
            }
        } 
Run Code Online (Sandbox Code Playgroud)

我得到这个例外:

"System.Reflection.TargetInvocationException: 调用目标抛出异常。\r\n ---> System.TypeInitializationException: 'OracleInternal.ServiceObjects.OracleConnectionImpl' 的类型初始值设定项抛出异常。\r\n - --> System.TypeInitializationException: 'Oracle.ManagedDataAccess.Types.TimeStamp' 的类型初始值设定项引发异常。\r\n ---> System.NotSupportedException: BinaryFormatter 序列化和反序列化在此应用程序中被禁用。请参阅https:// /aka.ms/binaryformatter 了解更多信息。\r\n 在 OracleInternal.Common.OracleTimeZone.GetInstance()\r\n 在 Oracle.ManagedDataAccess.Types.TimeStamp..cctor()\r\n --- 内部异常堆栈跟踪结束 -- -\r\n 在 Oracle.ManagedDataAccess.Types.TimeStamp.InitializelatestTZversion()\r\n 在 OracleInternal.ServiceObjects.OracleConnectionImpl..cctor()\r\n --- 内部异常堆栈跟踪结束 ---\r \n 在 OracleInternal.ServiceObjects.OracleConnectionImpl..ctor()\r\n --- 除离子堆栈跟踪之外的内部结束 ---\r\n"

可以从我的应用程序中解决这个问题吗?

我使用的是最新版本的 Oracle.ManagedDataAccess.Core 2.19.91,发布于 2020 年 10 月 22 日。另外,我使用的是 Dapper 2.0.35。

Jas*_*n D 31

我发现 Oracle 正在对此进行修复,应该很快就会推出。

同时,如果有人遇到此问题,有一个解决方法。

在您的项目文件中,您可以将 XML 语句添加到 EnableUnsafeBinaryFormatterSerialization。

  <PropertyGroup>
    <TargetFramework>net5.0</TargetFramework>
    <EnableUnsafeBinaryFormatterSerialization>true</EnableUnsafeBinaryFormatterSerialization>
  </PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

  • 非常感谢,但它导致了另一个异常{“‘OracleInternal.Network.AddressResolution’的类型初始值设定项引发了异常。”}内部异常是{“无法加载文件或程序集‘System.DirectoryServices.Protocols,版本= 4.0。 0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a'。系统找不到指定的文件。":"System.DirectoryServices.Protocols,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a"}。添加 System.DirectoryServices.Protocols v5.0.0 解决了该问题。 (2认同)
  • 首先,谢谢杰森。@Yongkee:您只需通过 Nuget System.DirectoryServices.Protocols 安装即可。 (2认同)