我有這個簡單的C#程序:未能加載類型 'System.Net.Security.SslStream'
using Npgsql;
public class App {
public static void Main(string[] args) {
const string CONNECTION_STRING = "Host=myserver;Username=mylogin;Password=mypass;Database=mydatabase";
using (var conn = new NpgsqlConnection(CONNECTION_STRING)) {
conn.Open();
}
}
}
,我和單編譯(MCS):
mcs -target:exe -lib:bin -r:System.Data.dll -r:Npgsql.dll -r:System.dll -r:Mono.Security.dll -out:bin/ssl.exe src/App.cs
當我執行時,拋出一個錯誤:
Unhandled Exception:
System.TypeLoadException: Could not load type 'System.Net.Security.SslStream' from assembly 'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.
at Npgsql.NpgsqlConnector.Open() <0x4155f7f0 + 0x00115> in <filename unknown>:0
at Npgsql.NpgsqlConnectorPool.GetPooledConnector (Npgsql.NpgsqlConnection Connection) <0x4155c8d0 + 0x00a4f> in <filename unknown>:0
[ERROR] FATAL UNHANDLED EXCEPTION: System.TypeLoadException: Could not load type 'System.Net.Security.SslStream' from assembly 'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.
at Npgsql.NpgsqlConnector.Open() <0x4155f7f0 + 0x00115> in <filename unknown>:0
at Npgsql.NpgsqlConnectorPool.GetPooledConnector (Npgsql.NpgsqlConnection Connection) <0x4155c8d0 + 0x00a4f> in <filename unknown>:0
我Npgsql.dll版本
$ monop2 -r Npgsql.dll
Assembly Information:
Npgsql
Version=2.2.0.0
Culture=neutral
PublicKeyToken=5d8b90d52f46fda7
我的編譯器:
$ mcs --version
Mono C# compiler version 4.4.0.0
$ mono --version
Mono JIT compiler version 4.4.0 (Stable 4.4.0.40/f8474c4 Mon Mar 28 12:22:29 UTC 2016)
Copyright (`u`C) 2002-2014 Novell, Inc, Xamarin Inc and Contributors. www.mono-project.com
TLS: __thread
SIGSEGV: altstack
Notifications: epoll
Architecture: amd64
Disabled: none
Misc: softdebug
LLVM: supported, not enabled.
GC: sgen
最後,我的環境:
$ uname --all
Linux abe 4.5.0-1-ARCH #1 SMP PREEMPT Tue Mar 15 09:41:03 CET 2016 x86_64 GNU/Linux
謝謝
是的,我在bin中有Mono.Security.dll。刪除後,它的作品!謝謝 – o3o
我有同樣的問題,這似乎是最近(可能與mono的最新更新有關)。 – picrap
我在使用JetBrains Rider的Linux中遇到了同樣的問題。該DLL在服務文件夾中。刪除文件不起作用。在構建過程中,dll被複制過。我編輯了/packages/Npgsql.2.2.2/net45/Npgsql.xml併爲Mono Security註釋掉了六行。這也沒有奏效。我將/packages/Npgsql.2.2.2/net45/Mono.Security.dll重命名爲junk.Mono.Security.dll.junk,並且工作正常。 –