2015-07-28 60 views
7

Zainstalowałem VS2015 RTM en VS2013 Update 5 RTM. Teraz moje rozwiązanie nie buduje, ponieważ mam interfejs, który ma jako returntype a X509Certificate2. Teraz moje podróbki nie są budowane. Stworzyłem również projekt testowy i mam ten sam problem, więc nie jest to moje rozwiązanie. Przesłanie, które pojawia się:System.Security.Cryptography.X509Certificates.X509Certificate2 nie jest dostępny w docelowej wersji szkieletowej

Nie można wygenerować niedopałek na ClassLibrary1.Interfaces.ICertificateProvider: metoda System.Security.Cryptography.X509Certificates.X509Certificate2 ClassLibrary1.Interfaces.ICertificateProvider.getbla() unstubbable: metoda jest abstrakcyjna i nie mógł be stubbed, wpisz System.Security.Cryptography.X509Certificates.X509Certificate2 nie jest dostępny w docelowej wersji frameworka.

Teraz odinstalowałem VS2015 RTM, ale problem nadal występuje. Kiedy komentuję metodę z typem zwracania, certyfikat wszystko działa. Kiedy odkomentuję to, problem jest.

Aktualizacja 1 Właśnie przetestowałem to w innym systemie. Najpierw próbowałem go z VS2013 Update 4 i VS2015 RC. Dzięki tej konfiguracji wszystko było w porządku. Następnie zainstalowałem Update 5 RTM w tym systemie, a następnie przestało działać. Więc aktualizacja 5 musi być problemem! aktualizacja Koniec

Aby odtworzyć: stworzyć rozwiązanie z 2 klasy bibliotek i 1 projektu badawczego z .Net Framework 4.5.1. Tworzenie interfejsu w klasie biblioteki 1.

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

Utwórz klasę w drugiej klasy biblioteki. Zaimplementuj interfejs i dodaj odwołanie do biblioteki pierwszej klasy.

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

Dodaj zespół podróbek do projektu interfejsu w projekcie unittest. Za następującym kodem w teście:

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

Teraz twój projekt się nie zbuduje. Jeśli skomentujesz metodę w interfejsie, Twój projekt zostanie zbudowany. Włącz diagnostykę w pliku .fakes, aby wyświetlić komunikat o błędzie.

Ktoś rozwiązanie?

Aktualizacja 2 Zmiana rozwiązania do użycia .Net Framework 4.6 działa. Zmiana na 4.5.2 nie działa.

Update 3 Link do oficjalnej bug z Github: https://github.com/dotnet/coreclr/issues/1303

+0

Witam, Mam ten sam błąd dzisiaj. Zastanawiasz się, czy była tam aktualizacja? –

+0

Nie, jeszcze nie. Jeśli znajdziesz rozwiązanie tego problemu, udostępnij je! –

+0

Na razie właśnie odinstalowałem Update 5 i VS2013. Następnie ponownie zainstalowałem VS2013 i Update 4. To działa. Tylko odinstalowanie aktualizacji 5 i ponowna instalacja aktualizacji 4 nie działa. Na razie to nasze jedyne rozwiązanie ... –

Odpowiedz

0

Właśnie zaktualizowaliśmy projekt testowy dla .NET 4.6 i działa świetnie. Potem miałem kilka klas wewnętrznych, które nie są widoczne dla podróbek tak wykorzystaniem

[montaż: InternalsVisibleT

w AssemblyConfig.cs to również dobry pomysł, aby w końcu uruchomiony.

+0

Tak, aktualizacja do wersji 4.6 rozwiązuje problem. Ale to nie jest naprawę. Nie mamy jeszcze pozwolenia na aktualizację, więc utknęliśmy w zepsutym rozwiązaniu. –

Powiązane problemy