Npgsql - Mono.Security.dll - 无法加载字段“Npgsql.NpgsqlConnection:CertificateSelectionCallback”的类型

问题描述 投票:0回答:1

我有一个使用 Postgres DB 的 C# 应用程序。它位于 .NET 4.0 中并使用 Npgsql 2.2.7.0,为了向后兼容我无法更改这些版本。

它在 Windows 和 Mono 3.2.8 的 Linux 板上运行良好。现在我需要在 Mono 6.8.0.105 中使用它。

我收到错误“System.TypeLoadException:无法加载字段‘System.Net.Security.SslStream:provider’的类型”,感谢这篇post,我通过从应用程序文件夹中删除 Mono.Security.dll 解决了这个问题。

现在出现另一个错误:

System.TypeLoadException: Could not load type of field 'Npgsql.NpgsqlConnection:CertificateSelectionCallback' (9) due to: Could not resolve type with token 01000058 from typeref (expected class 'Mono.Security.Protocol.Tls.CertificateSelectionCallback' in assembly 'Mono.Security, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756') assembly:Mono.Security, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756 type:Mono.Security.Protocol.Tls.CertificateSelectionCallback member:(null)

我做了一些测试,链接应用程序文件夹中的一些 Mono.Security.dll(在 Mono 安装中找到),但没有成功。对于另一个测试,我尝试注册到 System.Net.ServicePointManager.ServerCertificateValidationCallback 但也没有成功。

有人可以帮我解决这个问题吗?

非常感谢

只是一个更新:如果我用 Mono 5.10.1.20 替换 Mono 6.8.0.105,问题就会消失,所以我认为问题出在 Mono 的最新版本中

另一个更新:我发现,如果我从 Mono 5.10.1.20 的 GAC 复制 Mono.Security.dll 并将其放入应用程序文件夹中,则在 Mono 6.8.0.105 中也一切正常,所以我认为某些类已被删除从 Mono 5 到 6 的升级中的 Mono.Security

c# mono npgsql
1个回答
0
投票

在我的应用程序中,它可以与项目文件中的那些引用一起工作。

 <Reference Include="Mono.Security, Version=2.0.0.0, Culture=neutral,
  PublicKeyToken=0738eb9f132ed756, processorArchitecture=MSIL">  
  <SpecificVersion>False</SpecificVersion>  
 <HintPath>..\ExternalReferences\Mono.Security.dll</HintPath>
  </Reference> <Reference Include="Npgsql, Version=2.0.12.0,
 Culture=neutral, PublicKeyToken=5d8b90d52f46fda7,
  processorArchitecture=MSIL">  
 <SpecificVersion>False</SpecificVersion>  
  <HintPath>..\ExternalReferences\Npgsql.dll</HintPath> </Reference>
© www.soinside.com 2019 - 2024. All rights reserved.