【发布时间】: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