Рабочая область Roslyn для.NET Core нового формата.csproj

Я работал над расширением VS Code, которое использует API рабочей области Roslyn для загрузки проекта, в настоящее время расширение поддерживает старые версии.NET Core. project.json форматировать через ProjectJsonWorkspace введите в Microsoft.DotNet.ProjectModel.Workspaces пакет.

Вскоре будут выпущены новые изменения в инструментальной оснастке, и я готов поддержать новые .csproj Формат сборки, но не может найти рабочее пространство, совместимое со стандартом.NET Standard.

Насколько я понимаю, так как он использует MSBuild, мне нужно будет использовать MSBuild (Microsoft.CodeAnalysis.MSBuild), однако в настоящий момент он не поддерживает.NET Standard.

Каково наилучшее решение, если оно существует, или мне придется взглянуть на создание собственной реализации рабочей области?

1 ответ

Решение

Поговорив с разными людьми, кажется, что нет рабочей области MS Build, совместимой со стандартом.NET, это можно увидеть в следующем ответе на следующую проблему GitHub:

Мы не выполнили работу по корректной работе MSBuildWorkspace с новой кроссплатформенной платформой MSBuild. А пока вы можете посмотреть, что делает omnisharp для заполнения своего рабочего пространства.

Таким образом, кажется, что на момент написания статьи, если вы хотите настроить таргетинг на рабочее пространство MSBuild в проекте, совместимом со стандартом.NET, вам нужно будет создать собственное рабочее пространство с помощью API рабочего пространства Roslyn, это именно то, как это делает 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();

Эта же библиотека также позволит вам ссылаться на файл решения.

Другие вопросы по тегам