2016-07-05 22 views
11

Stworzyłem projekt biblioteki klas i zrobiłem trochę przetwarzania, a także użyłem Roslyn do wygenerowania kodu.Roslyn rzuca Język "C#" nie jest obsługiwany

Używam biblioteki w aplikacji GUI WPF jako odniesienie.

Są to pakiety Nuget:

enter image description here

budowy nie wykazuje żadnych błędów, jednak kiedy użyć następującego kodu:

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

uzyskać wyjątek:

"Język" C# "nie jest obsługiwany."

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) 

Według this i this muszę kopiować pliki CodeAnalysis lokalnie i dodać odpowiednie referencje. Są tam, ale błąd występuje.

Czy to nadal błąd, który nie został naprawiony w zeszłym roku?

Co jeszcze należy zrobić?

+0

Czy masz zależność od pakietu Microsoft.CodeAnalysis.CSharp.Workspaces? – svick

+0

@svick Tak, robię, zaktualizowałem swój pierwszy wpis z listą pakietów NuGet. – Nestor

+0

IMO jest to [problem z MsBuild] (https://github.com/Microsoft/msbuild/issues/1469) – StingyJack

Odpowiedz

8

Trzeba dodać pakiet Microsoft.CodeAnalysis zarówno do projektu biblioteki klasy a przedstawieniu projektu również.

11

Najprawdopodobniej dlatego, że nie odwołujesz się do kodu Microsoft.CodeAnalysis.CSharp.Workspaces, tzn. Nigdy nie używasz typu lub metody w tej bibliotece DLL, więc MSBuild uważa, że ​​nie jest to potrzebne (patrz np. Pytanie o numer: this).

Możesz więc zrobić np. dodaj następującą linię gdzieś w projekcie biblioteki klasy:

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

Następnie należy skopiować Microsoft.CodeAnalysis.CSharp.Workspaces.dll MSBuild nad i wszystko powinno być w porządku. Nie ma potrzeby odwoływania się do pakietów NuGet ze wszystkich innych projektów.

+0

W moim przypadku ładowałem rozwiązanie przez Roslyn w samodzielnej aplikacji z poleceniami i wszystkie projekty nie mogły się załadować, ponieważ Nie miałem tego pakietu, do którego się odwołuję w mojej aplikacji. Dodanie odwołania do nugetu naprawiło to. –

Powiązane problemy