与CentOs 7.1上的Npgsql + Dotnet CLI连接时出现MissingMethodException

时间:2016-04-21 15:56:25

标签: postgresql npgsql dnx50 dotnet-cli

我在CentOS 7.1上运行Dotnet CLI版本1.0.0-rc2-002439

我已经构建了一个原型Console应用程序,它只对PostgreSQL 9.4数据库执行选择。

我只针对DNXCORE50,在Windows上,一切正常。当我在CentOS上运行它时,我在conn.Open()

上得到以下异常
Unhandled Exception: System.MissingMethodException: Method not found: 'Void  System.Net.Security.SslStream.AuthenticateAsClient(System.String,  System.Security.Cryptography.X509Certificates.X509CertificateCollection,  System.Security.Authentication.SslProtocols, Boolean)'.
at Npgsql.NpgsqlConnector.RawOpen(NpgsqlTimeout timeout)
at Npgsql.NpgsqlConnector.Open(NpgsqlTimeout timeout)
at Npgsql.NpgsqlConnector.Open()
at Npgsql.NpgsqlConnectorPool.GetPooledConnector(NpgsqlConnection Connection)
at Npgsql.NpgsqlConnectorPool.RequestConnector(NpgsqlConnection connection)
at Npgsql.NpgsqlConnection.OpenInternal(NpgsqlTimeout timeout)
at Npgsql.NpgsqlConnection.Open()
at SensorBot.Core.Services.ConfigService.GetConfig()
at ConsoleApplication.Program.Main(String[] args)

这是project.json我使用:

{
  "version": "1.0.0-*",
  "compilationOptions": {
    "emitEntryPoint": false
  },
  "dependencies": {
    "Microsoft.NETCore.App": {
      "version": "1.0.0-rc2-23811"
    },
  },
  "runtimes": { "centos.7-x64": { } },
  "frameworks": {
    "dnxcore50": {
      "dependencies": {
        "Microsoft.CSharp": "4.0.1-beta-23516",
        "System.Collections": "4.0.11-beta-23516",
        "System.Console": "4.0.0-beta-23516",
        "System.Linq": "4.0.1-beta-23516",
        "System.Threading": "4.0.11-beta-23516",
        "System.IO": "4.1.0-*",
        "System.IO.FileSystem": "4.0.1-rc2-23811",
        "System.Runtime.Serialization.Primitives": "4.1.1-*",
        "System.Dynamic.Runtime": "4.0.11-*",
        "System.Net.Security": "4.0.0-beta-23405",
        "System.Net.NetworkInformation": "4.1.0-beta-23405",
        "System.Text.RegularExpressions": "4.0.12-rc2-23811",
        "Npgsql": "3.1.0-alpha6"
      }
    }
  }
}

我在npgsql的Github上看到使用https://www.myget.org/gallery/npgsql-unstable作为包源并使用Npgsql的不稳定版本修复了它但是当我使用"Npgsql": "3.1.0-unstable0458"时该应用程序没有编译并说这个版本的npgsql与DNXCore 5.0不兼容。

一定有一些我做错的事情,因为其他人似乎不再有这个问题。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我对npgsql版本 3.1.0-alpha6

有同样的例外
Unhandled Exception: System.MissingMethodException: Method not found: 'Void  System.Net.Security.SslStream.AuthenticateAsClient(System.String,  System.Security.Cryptography.X509Certificates.X509CertificateCollection,  System.Security.Authentication.SslProtocols, Boolean)'.

然而,我在两个版本都取得了成功: 3.1.0-unstable0458 3.1.0-unstable0478
目前我正在使用 Centos 7.2 ,Dotnet CLI版本 1.0.0-rc2-002510 。作为测试应用程序,我创建了一个简单的控制台应用程序,其中一个选择postgresql project.json 看起来像这样:

{
  "version": "1.0.0-*",
  "compilationOptions": {
    "emitEntryPoint": true
  },
  "dependencies": {
    "Microsoft.NETCore.App": {
      "type": "platform",
      "version": "1.0.0-rc2-23811"
    },
    "Npgsql": "3.1.0-unstable0478"
  },
 "frameworks": {
    "netcoreapp1.0": {
      "imports": "dnxcore50",
    }
  }
}

因为我使用SSL连接到db,所以我必须为我的连接字符串添加几个选项: SSL Mode = Require; Trust Server Certificate = True;使用SSL Stream = True

也许你应该尝试使用更新版本的dotnet cli。如果您对我的os / dotnet环境有任何疑问,请告诉我。