'PrivateKey' 没有 'CreateFromFile' 的定义

'PrivateKey' does not have a definition for 'CreateFromFile'

我正在尝试在我的应用程序中实施一个反映答案的解决方案 in this post

我有一个类似的场景,我在 Ubuntu 服务器上有一个基于 HttpListenerGrapevine 的应用程序 运行,我需要使用 [=15] =] 使用 Mono 并且我正在尝试创建并包含相关密钥以允许 HTTPS

我遇到的问题是解决方案的最后一行,

key = PrivateKey.CreateFromFile (pvk_file).RSA;

当我尝试相同时 Visual Studio 显示 error/text 突出显示的红色,'PrivateKey' does not have a definition for 'CreateFromFile'

我使用了错误的库还是我的代码本身存在其他问题?

我的代码,删减到相关方法。

using System;
using System.IO;
using System.Security.Cryptography.X509Certificates;
using System.Threading;
using java.security;

public class ConfigureCertificates
    {
        private readonly string _dirName;
        private readonly string _path;
        private readonly string _port;
        private readonly string _certFile;
        public ConfigureCertificates(string port)
        {
            _dirName = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
            _path = Path.Combine(_dirName, ".mono");
            _path = Path.Combine(_path, "httplistener");
            _port = port;
            _certFile = Path.Combine(_path, String.Format("{0}.cer", _port));
        }

        public void SetUpCerts()
        {
            if (!File.Exists(_certFile))
               throw new Exception("Certificate file not found");

            string pvkFile = Path.Combine(_path, String.Format("{0}.pvk", _port));

            if (!File.Exists(pvkFile))
                throw new Exception("Private key not found");

            var cert = new X509Certificate2(_certFile);
            var key = PrivateKey.CreateFromFile(pvkFile).RSA; // Error occurs here
        }
    }

您有命名冲突 - 换句话说,还有另一个名为 PrivateKey 的 class 没有您需要的方法。 A quick Google hunt 表示正确的 class 在 Mono.Security.Authenticode 命名空间中。所以你需要引用完整路径:

Mono.Security.Authenticode.PrivateKey.CreateFromFile(...)

如果您还没有 Mono.Security 包,您可能还需要添加它。