用于.NET Core的新.csproj格式

时间:2017-02-22 15:13:18

标签: .net-core roslyn

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

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

我的理解是,当它使用MSBuild时,我需要使用MSBuild(Microsoft.CodeAnalysis.MSBuild)包,但此时它不支持.NET Standard。

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

1 个答案:

答案 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();

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