罗斯林抛出了语言';C#和#x27;不支持

罗斯林抛出了语言';C#和#x27;不支持,c#,roslyn,C#,Roslyn,我创建了一个类库项目,并进行了一些处理,还使用Roslyn生成了代码 我使用WPF GUI应用程序中的库作为参考 以下是NuGet软件包: 但是,当我使用以下代码时,生成不会显示错误: private static void GetGenerator() { workspace = new AdhocWorkspace(); generator = SyntaxGenerator.GetGenerator(workspace, LanguageNames.CSharp); } 我得到

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

我使用WPF GUI应用程序中的库作为参考

以下是NuGet软件包:

但是,当我使用以下代码时,生成不会显示错误:

private static void GetGenerator()
{
  workspace = new AdhocWorkspace();
  generator = SyntaxGenerator.GetGenerator(workspace, LanguageNames.CSharp);
}
我得到一个例外:

“不支持语言‘C#’。”

根据和,我必须在本地复制代码分析文件并添加必要的引用。它们在那里,但是错误发生了

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


我还应该做什么?

您必须将
Microsoft.CodeAnalysis
包同时添加到类库项目和引用项目中。

很可能是因为您的代码中没有引用
Microsoft.CodeAnalysis.CSharp.Workspace
,也就是说,您从未在此dll中使用过类型或方法,因此MSBuild认为不需要它(请参见问题)

因此,您可以做的是,例如,在类库项目中的某个位置添加以下行:


然后MSBuild应该复制Microsoft.CodeAnalysis.CSharp.Workspaces.dll,一切都应该正常。无需引用所有其他项目的NuGet软件包。

您是否依赖Microsoft.CodeAnalysis.CSharp.Workspace软件包?@svick是的,我依赖,我用NuGet packages list更新了我的第一篇帖子。在我的例子中,我是通过Roslyn在一个独立的命令行应用程序中加载解决方案的,所有项目都未能加载,因为我的应用程序中没有引用该包。添加nuget引用修复了它。这将是一个比公认的答案更好的解决方案,但并不适用于所有DLL。例如,C#的代码完成所需的Microsoft.CodeAnalysis.CSharp.Features.dll没有公开一个公共类型,因此不需要保留任何内容。另一种方法是手动生成后事件来复制文件,或者接受将Nuget包添加到库和引用项目的答案。讨厌。构建后的操作实际上对我来说似乎更可取。或者选项3)将所需的DLL作为链接文件添加到引用项目中,并将“复制到输出目录”改为“复制到更新的目录”。天哪!你是救命恩人!谢谢你的帮助。但是-哦,上帝!为什么?这似乎是因为Roslyn使用(MEF)使用反射来加载DLL,所以在几个Roslyn DLL上没有编译时依赖关系,所以msbuild不会选择依赖关系,这反过来意味着它不会将文件复制到调用项目的输出。
   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)
var _ = typeof(Microsoft.CodeAnalysis.CSharp.Formatting.CSharpFormattingOptions);