2015-07-28 38 views
7

Ho installato VS2015 RTM e VS2013 Update 5 RTM. Ora la mia soluzione non sta costruendo perché ho un'interfaccia che ha come returntype un X509Certificate2. Ora i miei falsi non sono costruiti. Ho anche creato un progetto di test e lì ho lo stesso problema, quindi non è la mia soluzione. Il messaggio che ricevo è:System.Security.Cryptography.X509Certificates.X509Certificate2 non è disponibile nella versione di framework di destinazione

Impossibile generare stub per ClassLibrary1.Interfaces.ICertificateProvider: Metodo System.Security.Cryptography.X509Certificates.X509Certificate2 ClassLibrary1.Interfaces.ICertificateProvider.getbla() unstubbable: il metodo è astratto e non poteva essere stubbed, digitare System.Security.Cryptography.X509Certificates.X509Certificate2 non è disponibile nella versione di framework di destinazione.

Ora ho disinstallato VS2015 RTM ma il problema è ancora lì. Quando commento il metodo con come tipo di ritorno il certificato funziona tutto. Quando lo annullo, il problema è lì.

Aggiornamento 1 Ho appena testato questo su un altro sistema. Per prima cosa l'ho provato con VS2013 Update 4 e VS2015 RC. Con quella configurazione tutto andava bene. Ho quindi installato l'aggiornamento 5 RTM su quel sistema e quindi non ha funzionato più. Quindi l'aggiornamento 5 deve essere il problema! aggiornamento Fine

di riprodursi: Creare una soluzione con 2 librerie di classi e 1 progetto di test con il Net Framework 4.5.1. Creare un'interfaccia nella libreria di classi 1.

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

Creare una classe nella seconda libreria di classi. Implementare l'interfaccia e aggiungere un riferimento alla libreria di prima classe.

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

Aggiungere un gruppo di falsi per il progetto di interfaccia nel progetto unittest. Passato il seguente codice in una prova:

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

Ora il progetto non verrà generato. Se commentate il metodo nell'interfaccia che il vostro progetto costruirà. Abilitare la diagnostica nel file .fakes per il messaggio di errore.

Chiunque una soluzione?

Aggiornamento 2 Modifica della soluzione da utilizzare .Net Framework 4.6 funziona. Il passaggio alla 4.5.2 non funziona.

Update 3 Link bug ufficiale di Github: https://github.com/dotnet/coreclr/issues/1303

+0

Ciao, Ho ricevuto lo stesso errore oggi. Ti chiedi se ci sia stato un aggiornamento su di esso? –

+0

No non ancora. Se trovi una soluzione per questo, per favore condividi! –

+0

Per ora ho appena disinstallato Update 5 e VS2013. Successivamente ho installato nuovamente VS2013 e Update 4. Funziona. Solo la disinstallazione dell'aggiornamento 5 e la reinstallazione dell'aggiornamento 4 non hanno funzionato. Per ora questa è la nostra unica soluzione ... –

risposta

0

Ho appena aggiornato il progetto di test per .NET 4.6 e funziona benissimo. Dopo che ho avuto un paio di classi interne che non sono visibili ai falsi in modo che utilizzano il

[assembly: InternalsVisibleT

nelle AssemblyConfig.cs è anche una buona idea per ottenere finalmente in esecuzione.

+0

Sì, l'aggiornamento a 4.6 risolve il problema. Ma non è davvero una soluzione. Non abbiamo ancora il permesso di aggiornare, quindi siamo bloccati con una soluzione non funzionante. –