2016-07-05 20 views
11

Ho creato un progetto di libreria di classi e ho elaborato e utilizzato anche Roslyn per generare codice.Roslyn gira La lingua 'C#' non è supportata

Uso la libreria in un'applicazione GUI WPF come riferimento.

Questi sono i pacchetti Nuget:

enter image description here

Costruire mostra nessun errore, ma quando uso il seguente codice:

private static void GetGenerator() 
{ 
    workspace = new AdhocWorkspace(); 
    generator = SyntaxGenerator.GetGenerator(workspace, LanguageNames.CSharp); 
} 

ottengo un'eccezione:

"La lingua 'C#' non è supportata."

at: Microsoft.CodeAnalysis.Host.HostWorkspaceServices.GetLanguageServices(String languageName) 
    at: Microsoft.CodeAnalysis.Host.Mef.MefWorkspaceServices.GetLanguageServices(String languageName) 
    at: Microsoft.CodeAnalysis.Editing.SyntaxGenerator.GetGenerator(Workspace workspace, String language) 

Secondo this e this, devo copiare i file localmente la CodeAnalysis e aggiungere i riferimenti necessari. Sono lì, eppure l'errore si verifica.

Si tratta di un errore che non è stato risolto nell'ultimo anno?

Che altro dovrei fare?

+0

Avete una dipendenza dal pacchetto Microsoft.CodeAnalysis.CSharp.Workspaces? – svick

+0

@svick Sì, sì, ho aggiornato il mio post iniziale con l'elenco dei pacchetti NuGet. – Nestor

+0

IMO questo è un [problema con MsBuild] (https://github.com/Microsoft/msbuild/issues/1469) – StingyJack

risposta

8

si deve aggiungere il pacchetto Microsoft.CodeAnalysis sia al progetto di libreria classe E il riferimento del progetto pure.

11

Molto probabilmente è perché non si fa riferimento Microsoft.CodeAnalysis.CSharp.Workspaces nel codice, vale a dire non si utilizza mai un tipo o un metodo in questa dll, quindi MSBuild pensa non è necessaria (si veda ad esempio this questione).

Quindi, ciò che potresti fare è ad es. aggiungere la seguente riga da qualche parte nel progetto libreria di classe :

var _ = typeof(Microsoft.CodeAnalysis.CSharp.Formatting.CSharpFormattingOptions); 

Poi MSBuild dovrebbe copiare Microsoft.CodeAnalysis.CSharp.Workspaces.dll più e tutto dovrebbe andare bene. Non è necessario fare riferimento ai pacchetti NuGet da tutti gli altri progetti.

+0

Nel mio caso stavo caricando una soluzione tramite Roslyn in un'app a linea di comando autonoma e tutti i progetti non sono riusciti a caricare perché Non avevo quel pacchetto di riferimento nella mia app del tutto. Aggiungendo un riferimento a nuget l'ha risolto. –

Problemi correlati