我一直致力于使用Roslyn工作区API加载项目的VS Code扩展,此时扩展支持.NET Core的旧project.json
格式ProjectJsonWorkspace
包中的Microsoft.DotNet.ProjectModel.Workspaces
类型。
随着新的工具更改即将发布,我热衷于支持新的.csproj
构建格式,但似乎无法找到支持它的.NET Standard兼容工作区。
我的理解是,当它使用MSBuild时,我需要使用MSBuild(Microsoft.CodeAnalysis.MSBuild
)包,但此时它不支持.NET Standard。
如果存在最佳解决方案是什么,或者我是否必须考虑创建自己的工作区实现?
答案 0 :(得分:12)
与不同的人交谈后,似乎没有与.NET Standard兼容的MS Build工作区,下面的答案可以看作following GitHub issue:
我们还没有完成使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();
同样的库也允许您引用解决方案文件。