我一直在开发一个 VS Code 扩展,它使用 Roslyn 的工作区 API 来加载项目,目前该扩展通过
project.json
包中的 ProjectJsonWorkspace
类型支持 .NET Core 旧的 Microsoft.DotNet.ProjectModel.Workspaces
格式。
随着新的工具更改即将发布,我热衷于支持新的
.csproj
构建格式,但似乎找不到支持它的符合 .NET 标准的工作区。
我的理解是,由于它使用 MSBuild,我需要使用 MSBuild (
Microsoft.CodeAnalysis.MSBuild
) 包,但它目前不支持 .NET Standard。
最好的解决方案是什么(如果存在),还是我必须考虑创建自己的工作区实现?
与不同的人交谈后,似乎没有 .NET Standard 兼容的 MS Build 工作区,这可以通过下面对以下 GitHub 问题的回答看出:
我们尚未完成使 MSBuildWorkspace 与新的 MSBuild 跨平台正常工作的工作。与此同时,您可能会看看omnisharp 是如何填充其工作区的。因此,在撰写本文时,如果您想在符合 .NET 标准的项目中定位 MSBuild 工作区,那么您需要使用 Roslyn 的工作区 API 构建您自己的自定义工作区,这正是 OmniSharp 的做法。
更新(2017年10月16日):
虽然 MSBuildWorkspace 仍然不支持 .NET Standard,但有一个名为Buildalyzer 的库可以跨平台工作,并为您生成 AdhocWorkspace,让您实现相同的目标。
using Buildalyzer.Workspaces;
// ...
AnalyzerManager manager = new AnalyzerManager();
ProjectAnalyzer analyzer =
manager.GetProject(@"C:\MyCode\MyProject.csproj");
AdhocWorkspace workspace = analyzer.GetWorkspace();
同一个库还允许您引用解决方案文件。