Roslyn 抛出不支持语言 'C#'
Roslyn throws The language 'C#' is not supported
我创建了一个class库项目并做了一些处理,还使用了Roslyn生成代码。
我在 WPF GUI 应用程序中使用该库作为参考。
这些是 NuGet 包:
构建没有显示错误,但是当我使用以下代码时:
private static void GetGenerator()
{
workspace = new AdhocWorkspace();
generator = SyntaxGenerator.GetGenerator(workspace, LanguageNames.CSharp);
}
我遇到异常:
"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)
根据 this and this,我必须在本地复制 CodeAnalysis 文件并添加必要的引用。他们在那里,但发生错误。
这还是去年没有修复的bug吗?
我还应该做什么?
您必须将 Microsoft.CodeAnalysis
包添加到 class 库项目 和 引用项目。
很可能是因为您没有在代码中引用 Microsoft.CodeAnalysis.CSharp.Workspaces
,即您从不在此 dll 中使用类型或方法,因此 MSBuild 认为不需要(参见 this 问题).
所以你可以做的是,例如在您的 class 库项目 :
的某处添加以下行
var _ = typeof(Microsoft.CodeAnalysis.CSharp.Formatting.CSharpFormattingOptions);
然后 MSBuild 应该复制 Microsoft.CodeAnalysis.CSharp.Workspaces.dll
过来,一切都应该没问题。无需引用所有其他项目的 NuGet 包。
我创建了一个class库项目并做了一些处理,还使用了Roslyn生成代码。
我在 WPF GUI 应用程序中使用该库作为参考。
这些是 NuGet 包:
构建没有显示错误,但是当我使用以下代码时:
private static void GetGenerator()
{
workspace = new AdhocWorkspace();
generator = SyntaxGenerator.GetGenerator(workspace, LanguageNames.CSharp);
}
我遇到异常:
"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)
根据 this and this,我必须在本地复制 CodeAnalysis 文件并添加必要的引用。他们在那里,但发生错误。
这还是去年没有修复的bug吗?
我还应该做什么?
您必须将 Microsoft.CodeAnalysis
包添加到 class 库项目 和 引用项目。
很可能是因为您没有在代码中引用 Microsoft.CodeAnalysis.CSharp.Workspaces
,即您从不在此 dll 中使用类型或方法,因此 MSBuild 认为不需要(参见 this 问题).
所以你可以做的是,例如在您的 class 库项目 :
的某处添加以下行var _ = typeof(Microsoft.CodeAnalysis.CSharp.Formatting.CSharpFormattingOptions);
然后 MSBuild 应该复制 Microsoft.CodeAnalysis.CSharp.Workspaces.dll
过来,一切都应该没问题。无需引用所有其他项目的 NuGet 包。