2015-09-25 3 views
0

Я создаю собственный редактор Visual Studio 2015 (а не расширение редактора кода, полностью настраиваемый элемент управления WPF) для редактирования файлов .cs. Я действительно не уверен, что правильный подход заключается в использовании SDK .NET Compilation здесь.Использование Roslyn для VS2015 Custom Editor

До сих пор я пытался:

  • Получение workspace-> soltuion-> проекты и найти открытый файл, используя путь к файлу, который передается в мой редактор завода. Конечно, если документ не является частью решения, вы ничего не получаете.
  • Анализ исходного источника, потянув данные из текстового буфера и разворачивая мое собственное изолированное дерево синтаксиса.

Ничто из того, что я сейчас делаю, не чувствует себя абсолютно чистым. Есть ли более прямой способ доступа к API-интерфейсам компилятора для документа редактора?

+0

Вы можете уточнить, что вы пытаетесь достичь? В настоящее время у вас есть доступ к текстовому буферу VS, и вы пытаетесь получить документ для него? – JoshVarty

ответ

2

Возможно, я неправильно интерпретирую ваш вопрос, но я сделаю снимок. Похоже, вы пытаетесь найти документ Roslyn для заданного текстового буфера.

На самом деле существует целый набор методов расширения, чтобы упростить преодоление разрыва между объектами Roslyn и Visual Studio.

См: Microsoft.CodeAnalysis.Text.Extensions

Они не поставляются с Microsoft.CodeAnalysis NuGet пакет, хотя, вы должны будете установить их с помощью:

Install-Package Microsoft.CodeAnalysis.EditorFeatures.Text -Version 1.0.0

Дано ITextSnapshot или ITextBuffer эти методы позволят вы должны сопоставить их с оригинальными документами Roslyn (если они есть).

Для получения дополнительной информации: https://joshvarty.wordpress.com/2015/07/06/lrn-quick-tip-bridging-visual-studio-and-roslyn/

+0

Этот звук нравится что мне нужно, я скоро обновлюсь, когда у меня появится шанс попробовать. – Paul

+0

@Paul: Нет; это не то, что вам нужно. Если вы создаете собственный редактор, у вас не будет TextBuffer. Я предполагаю, что все, что у вас есть, это HierachyItem или ProjectItem. – SLaks

+0

Если одна из вещей, которую он пробовал, это синтаксический анализ текста непосредственно из текстового буфера, похоже, что он имеет доступ к TextBuffer или какой-то снимок. – JoshVarty

1

Необходимо использовать для использования существующего запаса рабочей области, иначе вы не получите ссылки или, что более важно, символы препроцессора (которые влияют на форму дерева синтаксиса).

Обратите внимание, что VS может иметь пару различных рабочих пространств, включая основной VisualStudioWorkspace для текущего решения, MiscellaneousFilesWorkspace для других файлов и некоторых других связанных с отладчиком. (full list)

+0

Этот метод, разрешая файл путем поиска документов рабочей области, наилучшим образом, или я могу получить идентификатор документа так или иначе? – Paul

+0

@Paul: Вы можете попытаться выяснить, как Roslyn делает это отображение при открытии обычных редакторов. Посмотрите http://source.roslyn.io/#Microsoft.VisualStudio.LanguageServices/Implementation/AbstractEditorFactory.cs, хотя я не уверен, что это подходящее место. – SLaks

+0

О дальнейшей мысли, посмотрите на http://source.roslyn.io/#Microsoft.VisualStudio.LanguageServices/Implementation/ProjectSystem/DocumentProvider.cs,79 (хотя я не уверен, сколько это поможет) – SLaks