我有一个使用 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
在我的应用程序中,它可以与项目文件中的那些引用一起工作。
<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>