В настоящее время я использую C# для разработки некоторого приложения, используемого на платформе Ubuntu 18.04 x64. Ничего особенного, но я использую класс System.Security.Cryptography.X509Certificates.X509Certificate2 для чтения сертификата publi c, как показано ниже.
byte[] PubKeyData = File.ReadAllBytes("signCert.der");
X509Certificate2 _cert = new X509Certificate2(PubKeyData);
Хорошо читается в Ubuntu. Но всякий раз, когда он используется вместе с Mono.Security.dll, каким-то новым X509Certificate2 () выдает ошибку, как показано ниже.
Type: System.NotSupportedException
Message: TLS Support not available.
Source: System
HelpLink:
Stacktrace:
at Mono.Net.Security.MonoTlsProviderFactory.InitializeInternal () [0x00037] in <4d8f95b7df544b3fa1a27dda924b4424>:0
at Mono.Net.Security.MonoTlsProviderFactory.GetProviderInternal () [0x00010] in <4d8f95b7df544b3fa1a27dda924b4424>:0
at Mono.Net.Security.MonoTlsProviderFactory.GetProvider () [0x00000] in <4d8f95b7df544b3fa1a27dda924b4424>:0
at Mono.Net.Security.NoReflectionHelper.GetProvider () [0x00000] in <4d8f95b7df544b3fa1a27dda924b4424>:0
at Mono.Security.Interface.MonoTlsProviderFactory.GetProvider () [0x00000] in <63c83801d42d495da761ba8ee525eba8>:0
at Mono.SystemCertificateProvider.EnsureInitialized () [0x00020] in <4d8f95b7df544b3fa1a27dda924b4424>:0
at Mono.SystemCertificateProvider.get_X509Pal () [0x00000] in <4d8f95b7df544b3fa1a27dda924b4424>:0
at Mono.SystemCertificateProvider.Import (System.Byte[] data, Mono.CertificateImportFlags importFlags) [0x00010] in <4d8f95b7df544b3fa1a27dda924b4424>:0
at System.Security.Cryptography.X509Certificates.X509Helper.Import (System.Byte[] rawData) [0x00005] in <c453bf849bb84e719dbec0475e99db95>:0
at System.Security.Cryptography.X509Certificates.X509Certificate..ctor (System.Byte[] data) [0x00023] in <c453bf849bb84e719dbec0475e99db95>:0
at System.Security.Cryptography.X509Certificates.X509Certificate2..ctor (System.Byte[] rawData) [0x00000] in <4d8f95b7df544b3fa1a27dda924b4424>:0
at MyApp.Controllers.Certificate.LoadCertificate (System.Byte[] PubKeyData, System.Byte[] PriKeyData, System.IO.FileInfo PubFileInfo, System.IO.FileInfo PriFileInfo) [0x006c5] in /home/user/Documents/Projects/MyApp/Common/AuthApp/Controllers/Certificate.cs:675
at MyApp.Controllers.Certificate..ctor (System.String PubKeyPath, System.String PriKeyPath) [0x00079] in /home/user/Documents/Projects/MyApp/Common/MyApp/Controllers/Certificate.cs:83
at MyApp.Controllers.Certificate+Location+<Get>d__0.MoveNext () [0x000bb] in /home/user/Documents/Projects/MyApp/Common/AuthApp/Controllers/Certificate.cs:1116
at MyApp.Client.Ubuntu.Views.frmCertificate.LoadCertificate () [0x000d4] in /home/user/Documents/Projects/MyApp/Client/AuthApp.Client.Ubuntu/Views/frmCertificate.cs:142
at MyApp.Client.Ubuntu.Views.frmCertificate.frmCertificate_Load (System.Object sender, System.EventArgs e) [0x00002] in /home/user/Documents/Projects/MyApp/Client/AuthApp.Client.Ubuntu/Views/frmCertificate.cs:43
Inner [2020-01-19 15:45:06.456.689281] Exception Found==============================
Type: System.TypeLoadException
Message: Type Mono.Btls.MonoBtlsProvider has invalid vtable method slot 5 with method none
Source: System
HelpLink:
Stacktrace:
at Mono.Net.Security.MonoTlsProviderFactory.InitializeInternal () [0x00023] in <4d8f95b7df544b3fa1a27dda924b4424>:0
Я нашел причину, но конд не может ее устранить.
Мой тест # 1) Всякий раз, когда Mono.Security.dll находится в моей папке Debug вместе, и когда я вызываю новый X509Certificate2 (PubKeyData), мое приложение выдает эту ошибку. Если я не использую какой-либо из классов Mono.Security, он не отсылает Mono.Security.dll в мою папку Debug, и ошибка не возникает.
Мой тест № 2) Я ссылался на Mono.Security.dll и использовал некоторые его коды, но остановился на новом X509Certificate2 (PubKeyData). Когда срабатывает отладчик, в новой строке X509Certificate2 (PubKeyData) я удалил файл Monon.Security.dll из папки Debug, и он не выдал ошибку.
Мой тест № 3) В Windows 7, 10, даже Mono.Security.dll находится в папке Debug вместе, это не выдаст ошибку. Он просто работает нормально.
Это очень странная проблема для меня.
Кто-нибудь сталкивался с подобной ошибкой раньше?