2015-08-09 17 views
6

Possiedo Visual Studio 2015 Enterprise e ho scoperto che non riesco a compilare quasi nessuno dei nostri progetti 2013 esistenti. Ulteriori indagini rivelano che Visual Studio 2015 non è in grado di generare falsi per i tipi che sono stati bene in Visual Studio 2013.Fake Broken in Visual Studio 2015

considerare i seguenti passaggi per riprodurre:

  • Creare un progetto di test di unità mira .NET 4.5
  • tasto destro del mouse su "sistema" nella scheda riferimenti e scegliere "Aggiungi Assemblea Fakes"
  • per eliminare il rumore per questo esempio, modificare il successivo file "System.fakes":
<Fakes xmlns="http://schemas.microsoft.com/fakes/2011/" Diagnostic="true"> 
    <Assembly Name="System" Version="4.0.0.0"/> 
    <StubGeneration> 
    <Clear/> 
    </StubGeneration> 
    <ShimGeneration> 
    <Clear/> 
    </ShimGeneration> 
</Fakes> 
  • Quindi modificare il file "mscorlib.fakes" per spessorare ConcurrentDictionary < TKey, TValue>:
<Fakes xmlns="http://schemas.microsoft.com/fakes/2011/" Diagnostic="true"> 
    <Assembly Name="mscorlib" Version="4.0.0.0"/> 
    <StubGeneration> 
    <Clear/> 
    </StubGeneration> 
    <ShimGeneration> 
    <Clear/> 
    <Add FullName="ConcurrentDictionary"/> 
    </ShimGeneration> 
</Fakes> 
  • compilare il progetto.

  • Questo genera i seguenti messaggi di errore nel file di mscorlib.4.0.0.0.Fakes.messages (generato nella cartella FakesAssemblies):

avvertimento: la compilazione è fallita, riprovare senza Codice Contratti

E seguenti messaggi di errore nella finestra di output:

c: \ temp \ UnitTestProject1 \ UnitTestProject1 \ f.cs (955,13): errore CS0311: il tipo 'System.Collections.Concurrent.ConcurrentDictionary' non può essere utilizzato come parametro di tipo 'TShimmed' nel tipo generico o nel metodo 'ShimRuntime .Bind (TShim, TBound) '. Non esiste alcuna conversione implicita del riferimento da "System.Collections.Concurrent.ConcurrentDictionary" a "System.Collections.Generic.IReadOnlyCollection>". [c: \ temp \ UnitTestProject1 \ UnitTestProject1 \ obj \ Debug \ Fakes \ m \ f.csproj]

c: \ temp \ UnitTestProject1 \ UnitTestProject1 \ f.cs (979,13): errore CS0311: il tipo ' System.Collections.Concurrent.ConcurrentDictionary 'non può essere utilizzato come parametro di tipo' TShimmed 'nel tipo generico o nel metodo' ShimRuntime.Bind (TShim, TBound) '. Non esiste alcuna conversione implicita del riferimento da "System.Collections.Concurrent.ConcurrentDictionary" a "System.Collections.Generic.IReadOnlyDictionary". [C: \ temp \ UnitTestProject1 \ UnitTestProject1 \ obj \ Debug \ Falsi \ m \ f.csproj]

GENERATEFAKES: errore: la compilazione del progetto non riuscita con codice di uscita 1

Nessuna quantità di giocherellare con mscorlib. le impostazioni dei falsi sembrano aiutare. Ad esempio, varie permutazioni degli attributi TypeName, FullName e Namespace producono la stessa "compilazione non riuscita con codice di uscita 1".

Disattivazione contratti codice appena rompe più:

Attenzione L'elemento 'falsi' nello spazio dei nomi 'http://schemas.microsoft.com/fakes/2011/' ha valida elemento figlio 'StubGeneration' nello spazio dei nomi 'http://schemas.microsoft.com/fakes/2011/'. UnitTestProject1 c: \ temp \ UnitTestProject1 \ UnitTestProject1 \ Falsi \ mscorlib.fakes 4

Qualsiasi aiuto capire come risolvere il problema/ovviare a questo problema sarebbe molto apprezzato.

+0

aggiornamento rapido su questo - abbiamo scoperto che questo errore solo appare quando si rivolge a qualsiasi framework .NET diverso da 4.6. Avevamo evitato .NET 4.6 a causa di [questo problema] (http://blogs.msdn.com/b/dotnet/archive/2015/07/28/ryujit-bug-advisory-in-the-net-framework- 4-6.aspx). – 42vogons

+0

Sembra che al momento funzioni solo per bloccare il ConcurrentDictionary. Questo ha risolto i miei problemi ma molto probabilmente non risolverà il tuo:/ –

+0

E lì ho digitato troppo velocemente. Posso cancellare il dizionario concorrente, ma non posso ancora aspettarmi nulla dai suoi metodi ... –

risposta

0
  1. Se si sta facendo con Visual Studio 2015 Enterprize.kindly rimuovere e di Old Xrm dll Aggiungi nuovo CRM 2016 SDK Xrm Dll di costruire il progetto anche cambiare il Net Framework per ultima.

  2. Dopo costruire il progetto Genera Assemblea Falsi sistema avremo mscorlib e system.Fakesjust rimuovere questa riga <Add FullName="ConcurrentDictionary"/> su entrambi i file e generare il progetto