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

问题描述 投票:0回答:1

我一直在开发一个 VS Code 扩展,它使用 Roslyn 的工作区 API 来加载项目,目前该扩展通过

project.json
包中的
ProjectJsonWorkspace
类型支持 .NET Core 旧的
Microsoft.DotNet.ProjectModel.Workspaces
格式。

随着新的工具更改即将发布,我热衷于支持新的

.csproj
构建格式,但似乎找不到支持它的符合 .NET 标准的工作区。

我的理解是,由于它使用 MSBuild,我需要使用 MSBuild (

Microsoft.CodeAnalysis.MSBuild
) 包,但它目前不支持 .NET Standard。

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

.net-core roslyn
1个回答
14
投票

与不同的人交谈后,似乎没有 .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();
同一个库还允许您引用解决方案文件。

© www.soinside.com 2019 - 2024. All rights reserved.