2015-07-28 24 views
7

Ich installierte VS2015 RTM und VS2013 Update 5 RTM. Jetzt wird meine Lösung nicht aufgebaut, weil ich eine Schnittstelle habe, die als returntype X509Certificate2 hat. Jetzt sind meine Fälschungen nicht gebaut. Ich habe auch ein Testprojekt erstellt und da habe ich das gleiche Problem, also ist es nicht meine Lösung. Die Botschaft, die ich erhalte, ist:System.Security.Cryptography.X509Certificates.X509Certificate2 ist nicht verfügbar in der Ziel-Framework-Version

kann nicht generiert werden Stub für ClassLibrary1.Interfaces.ICertificateProvider: Methode System.Security.Cryptography.X509Certificates.X509Certificate2 ClassLibrary1.Interfaces.ICertificateProvider.getbla() unstubbable: Methode ist abstrakt und kann nicht stubbed, type System.Security.Cryptography.X509Certificates.X509Certificate2 ist in der Ziel-Framework-Version nicht verfügbar.

Jetzt habe ich VS2015 RTM deinstalliert, aber das Problem ist immer noch da. Wenn ich die Methode auskommentiere, wenn das Zertifikat zurückgegeben wird, funktioniert alles. Wenn ich es auskommentiere, ist das Problem da.

Update 1 Ich habe dies gerade auf einem anderen System getestet. Zuerst habe ich es mit VS2013 Update 4 und VS2015 RC versucht. Mit diesem Setup war alles in Ordnung. Ich habe dann Update 5 RTM auf diesem System installiert und dann hat es nicht mehr funktioniert. Also Update 5 muss das Problem sein! End Update

zu reproduzieren: Erstellen Sie eine Lösung mit 2-Klassenbibliotheken und 1 Testprojekt mit .Net Framework 4.5.1. eine Schnittstelle erstellen in Klassenbibliothek 1.

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

eine Klasse in der zweiten Klasse Bibliothek erstellen. Implementieren Sie die Schnittstelle und fügen Sie einen Verweis auf die erste Klassenbibliothek hinzu.

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

Fügen Sie im Unittest-Projekt eine Fälschungsassembly für das Schnittstellenprojekt hinzu. Hinter den folgenden Code in einem Test:

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(); 
     } 
    } 
} 

Jetzt wird Ihr Projekt nicht erstellen. Wenn Sie die Methode in der Schnittstelle kommentieren, die Ihr Projekt erstellt. Aktivieren Sie die Diagnose in Ihrer .fakes Datei für die Fehlermeldung.

Wer ist eine Lösung?

Update 2 Ändern der zu verwendenden Lösung .Net Framework 4.6 funktioniert. Der Wechsel zu 4.5.2 funktioniert nicht.

Update 3 Link zur offiziellen Bug von Github: https://github.com/dotnet/coreclr/issues/1303

+0

Hallo, Ich habe heute den gleichen Fehler. Fragen Sie sich, ob es ein Update dazu gibt? –

+0

Nein, noch nicht. Wenn Sie eine Lösung dafür finden, teilen Sie diese bitte mit! –

+0

Für jetzt habe ich nur Update 5 und VS2013 deinstalliert. Danach habe ich VS2013 und Update 4 erneut installiert. Das funktioniert. Nur die Deinstallation von Update 5 und die Neuinstallation von Update 4 funktionierten nicht. Für jetzt ist dies unsere einzige Lösung ... –

Antwort

0

ich das Testprojekt auf 4,6 .NET nur aktualisiert, und es funktioniert super. Danach habe ich ein paar internen Klassen hatte, die mit den Fälschungen nicht sichtbar ist, so den

mit [assembly: InternalsVisibleT

in der AssemblyConfig.cs ist auch eine gute Idee, es läuft schließlich zu bekommen.

+0

Ja, ein Upgrade auf 4.6 behebt das Problem. Aber das ist nicht wirklich eine Lösung. Wir haben noch keine Erlaubnis, um zu aktualisieren, also stecken wir fest mit einer kaputten Lösung. –