.NET Core 的新 .csproj 格式的 Roslyn 工作区

Roslyn workspace for .NET Core's new .csproj format

我一直在开发一个 VS Code 扩展,它使用 Roslyn 的工作区 API 来加载项目,目前该扩展通过 [=11] 支持 .NET Core 的旧 project.json 格式=] 输入 Microsoft.DotNet.ProjectModel.Workspaces 包。

随着即将发布的新工具更改,我很想支持新的 .csproj 构建格式,但似乎找不到支持它的 .NET Standard 兼容工作区。

我的理解是,由于它使用的是 MSBuild,因此我需要使用 MSBuild (Microsoft.CodeAnalysis.MSBuild) 包,但它目前不支持 .NET Standard。

最好的解决方案是什么(如果存在的话),还是我必须考虑创建自己的工作区实现?

与不同的人交谈后发现似乎没有与 .NET Standard 兼容的 MS Build 工作区,这可以通过下面对 following GitHub issue 的回答看出:

We haven't done the work to make MSBuildWorkspace work properly with the new MSBuild cross-platform. In the meantime, you might look at what omnisharp does to populate it's workspace.

因此,在撰写本文时,如果您想在符合 .NET Standard 的项目中以 MSBuild 工作区为目标,那么您将需要使用 Roslyn 的工作区 API 构建自己的自定义工作区,这OmniSharp 正是这样做的。

更新 (16/10/2017):

虽然 MSBuildWorkspace 仍然不支持 .NET Standard,但有一个名为 Buildalyzer 的库可以跨平台工作,并会为您生成一个 AdhocWorkspace,让您实现相同的目标。

using Buildalyzer.Workspaces;
// ...

AnalyzerManager manager = new AnalyzerManager();
ProjectAnalyzer analyzer = 
manager.GetProject(@"C:\MyCode\MyProject.csproj");
AdhocWorkspace workspace = analyzer.GetWorkspace();

同一个库还允许您引用解决方案文件。