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

Jos*_*ard 18 roslyn .net-core

我一直致力于使用Roslyn的工作空间API来加载项目的VS Code扩展,此时扩展project.json通过包中的ProjectJsonWorkspace类型支持.NET Core的旧格式Microsoft.DotNet.ProjectModel.Workspaces.

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

我的理解是,因为它正在使用MSBuild,我将需要使用MSBuild(Microsoft.CodeAnalysis.MSBuild)包,但此时它不支持.NET Standard.

如果存在,或者我是否必须考虑创建自己的工作区实现,最佳解决方案是什么?

Jos*_*ard 13

与各种人交谈后,似乎没有与.NET Standard兼容的MS Build工作区,下面的答案可以看出以下GitHub问题:

我们还没有完成使MSBuildWorkspace与新的MSBuild跨平台正常工作的工作.与此同时,您可能会看看omnisharp在填充工作区时的作用.

因此,在编写本文时,如果您希望在符合.NET标准的项目中定位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();
Run Code Online (Sandbox Code Playgroud)

同样的库也允许您引用解决方案文件.

  • 我相信有问题的代码是这样的:https://github.com/OmniSharp/omnisharp-roslyn/blob/a4dced28f5f3b38d806134e89a6896c9d8075997/src/OmniSharp.DotNet/DotNetWorkspace.cs。 (2认同)