Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Roslyn throws The language 'C#' is not supported

Tags:

I have created a class library project and did some processing and also used Roslyn to generate code.

I use the library in a WPF GUI application as a reference.

These are the NuGet packages:

enter image description here

Build shows no error, however when I use the following code:

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

I get an exception:

"The language 'C#' is not supported."

   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) 

According to this and this, I have to copy the CodeAnalysis files locally and add the necessary references. They are there, yet the error occurs.

Is this still a bug that wasn't fixed in the last year?

What else should I do?

like image 446
Nestor Avatar asked Jul 05 '16 13:07

Nestor


2 Answers

Most likely it's because you don't reference Microsoft.CodeAnalysis.CSharp.Workspaces in your code, i.e. you never use a type or method in this dll, so MSBuild thinks it's not needed (see e.g. this question).

So what you could do is e.g. add the following line somewhere in your class library project:

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

Then MSBuild should copy Microsoft.CodeAnalysis.CSharp.Workspaces.dll over and everything should be fine. No need to reference the NuGet packages from all the other projects.

like image 88
Johannes Egger Avatar answered Oct 09 '22 20:10

Johannes Egger


You have to add the Microsoft.CodeAnalysis package to both the class library project AND the referencing project as well.

like image 35
Nestor Avatar answered Oct 09 '22 22:10

Nestor