C# 无法加载类型';System.Net.Security.SslStream';

C# 无法加载类型';System.Net.Security.SslStream';,c#,linux,mono,npgsql,C#,Linux,Mono,Npgsql,我有一个简单的C#程序: 我用mono(mcs)编译它: 执行时,抛出一个错误: 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.NpgsqlC

我有一个简单的C#程序:

我用mono(mcs)编译它:

执行时,抛出一个错误:

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 
我的编译器:

$ 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文件夹中是否有library Mono.Security.dll?如果是,请将其删除,然后重试。

我想为像我这样会遇到不同异常的人提供此信息,我有:

System.TypeLoadException: Failure has occurred while loading a type. at Npgsql.NpgsqlConnector.Open () [0x0002b] in <filename unknown>:0  at Npgsql.NpgsqlConnectorPool.GetPooledConnector (Npgsql.NpgsqlConnection Connection) [0x0017e] in <filename unknown>:0
但PIKos解决方案也适用于我。

我正在使用:

Mono JIT compiler version 4.4.0 (tarball Tue Jun 14 13:41:51 UTC 2016)

Npgsql.dll version 2.1.0.0

基于@pikos的响应,我在一个nuget包中发现了其中一个程序集,我正在使用它自己的
Mono.Security.dll
。然而,Mono4.4.1,可能也会有一些移动。由于我没有明确引用
Mono.Security
,[x | ms]build正在使用我的
文件夹中不兼容的程序集来解决间接依赖关系


为了解决这个问题,在没有任何其他解决方法(例如每次构建时删除程序集)的情况下,我只是向系统的
Mono.Security
添加了一个显式的程序集引用。这迫使GAC使用4.4.1版本。由于没有使用来自nuget的补丁,我丢失了促使nuget的构建者加入他们自己的Mono.Security的补丁,但是我现在还可以接受。正如PiKos指出的,罪魁祸首是Npgsql 2.x NuGet包嵌入的
Mono.Security.dll
。在bin目录中删除它确实解决了这个问题,但每次清理和重建解决方案时,都必须手动执行

我没有删除它,而是选择通过将
Mono.Security.dll
重命名为
Mono.Security.dll.original
并在Mono的GAC中添加到
Mono.Security.dll
的符号链接,来修复
~/.nuget/packages/Npgsql/2.2.7/lib/net45>中的npgsql2.2.7包。下面是我的
~/.nuget/packages/npgsql/2.2.7/lib/net45
目录的外观:

lrwxr-xr-x Mono.Security.dll -> /Library/Frameworks/Mono.framework/Versions/Current/lib/mono/gac/Mono.Security/4.0.0.0__0738eb9f132ed756/Mono.Security.dll
-rwxrw-rw- Mono.Security.dll.original
-rwxrw-rw- Npgsql.dll
-rwxrw-rw- Npgsql.xml
drwxr-xr-x de
drwxr-xr-x es
drwxr-xr-x fi
drwxr-xr-x fr
drwxr-xr-x ja
drwxr-xr-x zh-CN
此解决方案的优点是,它适用于引用Npgsql NuGet包的所有项目


如果因为您的选择而依赖于Npgsql 2.2.7,那么只需使用依赖于Npgsql>=4.0.2的最新软件包,而这个问题根本不存在。

是的,我在bin中有Mono.Security.dll。删除后,它的工作!ThanksI也有同样的问题,这似乎是最近的问题(可能与mono的最新更新有关)。我在Linux中使用JetBrains Rider也有同样的问题。dll位于服务文件夹中。删除文件无效。在生成过程中重新复制了dll。我编辑了/packages/Npgsql.2.2.2/net45/Npgsql.xml,并为Mono安全性注释了六行代码。这也不起作用。我将/packages/Npgsql.2.2.2/net45/Mono.Security.dll重命名为junk.Mono.Security.dll.junk,这很有效。
System.TypeLoadException: Failure has occurred while loading a type. at Npgsql.NpgsqlConnector.Open () [0x0002b] in <filename unknown>:0  at Npgsql.NpgsqlConnectorPool.GetPooledConnector (Npgsql.NpgsqlConnection Connection) [0x0017e] in <filename unknown>:0
conn.Open();
Mono JIT compiler version 4.4.0 (tarball Tue Jun 14 13:41:51 UTC 2016)

Npgsql.dll version 2.1.0.0
lrwxr-xr-x Mono.Security.dll -> /Library/Frameworks/Mono.framework/Versions/Current/lib/mono/gac/Mono.Security/4.0.0.0__0738eb9f132ed756/Mono.Security.dll
-rwxrw-rw- Mono.Security.dll.original
-rwxrw-rw- Npgsql.dll
-rwxrw-rw- Npgsql.xml
drwxr-xr-x de
drwxr-xr-x es
drwxr-xr-x fi
drwxr-xr-x fr
drwxr-xr-x ja
drwxr-xr-x zh-CN