.NET Standard

时间:2018-04-16 21:20:16

标签: c# .net wpf uwp x509certificate2

我正在尝试构建一个在WPF应用程序和UWP应用程序之间共享的组件。

我创建了一个.NET标准库来包含公共代码,如果我将库版本保持为1.2,我就可以构建所有内容。

图书馆需要从X509Store获得证书:

internal X509Certificate2 GetClientCertificate(string thumbPrint)
{
    if (string.IsNullOrEmpty(thumbPrint))
    {
        throw new ArgumentNullException(nameof(thumbPrint));
    }
    else
    {
        var store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
        store.Open(OpenFlags.ReadOnly);
        var certificates = store.Certificates.Find(X509FindType.FindByThumbprint, thumbPrint, true);
        if (certificates.Count > 0)
        {
            return certificates[0];
        }
        else
        {
            throw new Exception($"No client certificate found for thumbprint {thumbPrint}");
        }
    }
}

如果置于UWP或WPF项目中,但放置在.NET标准库中时,此代码可以正常工作

  1. Visual Studio表示我需要添加System.dll来解析X509Certificate2的定义(我这样做了,但这样可以吗?)和
  2. Visual Studio表示我需要添加mscorlib.dll来解析一堆枚举,我试过但是VS不会添加它。
  3. .NET Standard 1.2中是否支持证书存储区?如果没有,还有其他方法(在两个项目中没有引用相同的代码)我可以实现具有X509Store访问权限的组件吗?

1 个答案:

答案 0 :(得分:0)

您的共享项目可以使用MSBuild的多目标功能进行定位,

  • .NET Standard
  • .NET Framework 4.5.x

然后,即使没有将WPF项目升级到.NET Framework 4.6.1,您也可以共享代码。

您可以在https://blog.lextudio.com/tips-for-net-nuget-package-authors-august-2017-48f07604e4a0

中找到更多提示