【问题标题】:Roslyn workspace for .NET Core's new .csproj format.NET Core 的新 .csproj 格式的 Roslyn 工作区
【发布时间】:2017-02-22 15:13:17
【问题描述】:

我一直在开发一个使用 Roslyn 的工作区 API 加载项目的 VS Code 扩展,目前该扩展通过 Microsoft.DotNet.ProjectModel.Workspaces 包中的 ProjectJsonWorkspace 类型支持 .NET Core 的旧 project.json 格式。

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

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

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

【问题讨论】:

  • 不知道它是否与您的问题有关,但在 2018 年 3 月 28 日左右,他们重新组织了涉及MSBuildWorkspace 的事情,在src\Workspaces\Core\MSBuild 中创建了一个新项目。 (把我绊倒了,让我构建的一些 Roslyn 修改失败。)也许他们正在努力提供你所询问的功能?

标签: .net-core roslyn


【解决方案1】:

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

我们尚未完成使 MSBuildWorkspace 与新的 MSBuild 跨平台正常工作的工作。同时,您可能会查看omnisharp 为填充其工作区所做的工作。

因此,在撰写本文时,如果您想在符合 .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();

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

【讨论】:

猜你喜欢
  • 2019-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-14
  • 2020-04-03
  • 2020-05-22
相关资源
最近更新 更多