Roslyn抛出不支持语言'C#'

Nes*_*tor 17 c# roslyn

我创建了一个类库项目并进行了一些处理,并使用Roslyn生成代码.

我在WPF GUI应用程序中使用该库作为参考.

这些是NuGet包:

在此输入图像描述

Build显示没有错误,但是当我使用以下代码时:

private static void GetGenerator()
{
  workspace = new AdhocWorkspace();
  generator = SyntaxGenerator.GetGenerator(workspace, LanguageNames.CSharp);
}
Run Code Online (Sandbox Code Playgroud)

我得到一个例外:

"不支持语言'C#'."

   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)
Run Code Online (Sandbox Code Playgroud)

根据这个这个,我必须在本地复制CodeAnalysis文件并添加必要的引用.他们在那里,但错误发生.

这仍然是去年没有修复的错误吗?

我还该怎么办?

Joh*_*ger 18

很可能是因为你没有Microsoft.CodeAnalysis.CSharp.Workspaces在你的代码中引用,即你从不在这个dll中使用类型或方法,所以MSBuild认为不需要它(参见例如这个问题).

所以你可以做的是在你的类库项目中的某处添加以下行:

var _ = typeof(Microsoft.CodeAnalysis.CSharp.Formatting.CSharpFormattingOptions);
Run Code Online (Sandbox Code Playgroud)

然后MSBuild应该复制Microsoft.CodeAnalysis.CSharp.Workspaces.dll,一切都应该没问题.无需从所有其他项目中引用NuGet包.


Nes*_*tor 15

您还必须将Microsoft.CodeAnalysis包添加到类库项目引用项目中.