【问题标题】:System.Security.Cryptography.X509Certificates.X509Certificate2 is not available in the target framework versionSystem.Security.Cryptography.X509Certificates.X509Certificate2 在目标框架版本中不可用
【发布时间】:2015-10-18 13:20:16
【问题描述】:

我安装了 VS2015 RTM 和 VS2013 Update 5 RTM。现在我的解决方案没有建立,因为我有一个返回类型为X509Certificate2 的接口。现在我的假货没有建立。我还创建了一个测试项目,在那里我遇到了同样的问题,所以这不是我的解决方案。我得到的信息是:

无法为 ClassLibrary1.Interfaces.ICertificateProvider 生成存根:方法 System.Security.Cryptography.X509Certificates.X509Certificate2 ClassLibrary1.Interfaces.ICertificateProvider.getbla() 不可存根:方法是抽象的,不能存根,类型 System.Security.Cryptography。 X509Certificates.X509Certificate2 在目标框架版本中不可用。

现在我卸载了 VS2015 RTM,但问题仍然存在。当我用返回类型注释掉该方法时,证书一切正常。当我取消注释时,问题就在那里。

更新 1 我刚刚在另一个系统上测试了这个。首先,我使用 VS2013 Update 4 en VS2015 RC 进行了尝试。有了这个设置,一切都很好。然后我在该系统上安装了 Update 5 RTM,然后它就不再工作了。所以更新 5 一定是问题所在! 结束更新

重现: 使用 .Net Framework 4.5.1 创建具有 2 个类库和 1 个测试项目的解决方案。 在类库1中创建一个接口。

namespace ClassLibrary1.Interfaces
{
    public interface ICertificateProvider
    {
        // Comment this line so you can build your fakes assembly...
        X509Certificate2 getbla();
    }
}

在第二个类库中创建一个类。实现接口并添加对第一个类库的引用。

namespace ClassLibrary1
{
    public class CertificateProvider :   ClassLibrary1.Interfaces.ICertificateProvider
    {
        public X509Certificate2 getbla()
        {
            throw new NotImplementedException();
        }
    }
}

在unittest项目中为interface项目添加fakes程序集。在测试中通过以下代码:

using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using ClassLibrary1.Interfaces.Fakes;

namespace UnitTestProject1
{
    [TestClass]
    public class UnitTest1
    {
        [TestMethod]
        public void TestMethod1()
        {
            StubICertificateProvider provider = new StubICertificateProvider();
        }
    }
}

现在您的项目将无法构建。如果您在界面中注释该方法,您的项目将构建。 在您的 .fakes 文件中启用错误消息的诊断。

谁有解决办法?

更新 2 将解决方案更改为使用 .Net Framework 4.6 有效。更改为 4.5.2 不起作用。

更新 3 Github官方bug链接: https://github.com/dotnet/coreclr/issues/1303

【问题讨论】:

  • 嗨,我今天遇到了同样的错误。想知道它是否有更新?
  • 还没有。如果您找到解决方案,请分享!
  • 现在我刚刚卸载了 Update 5 和 VS2013。之后,我再次安装了 VS2013 和 Update 4。那是有效的。只有卸载更新 5 并重新安装更新 4 不起作用。目前这是我们唯一的解决方案...
  • 谢谢。对我来说,这是导致此问题的界面中的一种方法。我更新了接口以返回对象类型而不是 X509Certificate 并处理和处理客户端,以便它们类型转换返回对象。不是理想的解决方案,但只有一个对我有用。

标签: .net visual-studio-2013 system microsoft-fakes mscorlib


【解决方案1】:

我刚刚将测试项目更新为 .NET 4.6,效果很好。在那之后,我有几个内部类对假货来说是不可见的,所以使用

[程序集:InternalsVisibleT

在 AssemblyConfig.cs 中让它最终运行也是一个好主意。

【讨论】:

  • 是的,升级到 4.6 可以解决问题。但这并不是真正的解决办法。我们还没有升级权限,所以我们遇到了一个损坏的解决方案。
猜你喜欢
  • 2018-02-07
  • 1970-01-01
  • 2011-03-27
  • 1970-01-01
  • 2021-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多