#c# #roslyn
#c# #roslyn
Вопрос:
Я создаю некоторый VSIX. У меня есть служба VisualStudioWorkspace. Теперь я могу анализировать синтаксическое дерево, и все это работает просто отлично. Но, когда в решение добавляется новый файл (например, в результате некоторой работы VisualStudio), этот документ отсутствует в VisualStudioWorkspace.Текущее решение. Это работает так:
Сначала я получаю рабочую область:
currentWorkspace = componentModel.GetService<VisualStudioWorkspace>();
Теперь currentWorkspace.CurrentSolution
я могу получить синтаксическое дерево. Теперь в результате некоторой работы в решение добавляется новый файл cs, но currentWorkspace.CurrentSolution
он не отображается. Должен ли я добавлять его вручную? Есть ли какой-либо способ обновить этот объект CurrentSolution?
Ответ №1:
Должен ли я добавлять его вручную?
Да, дизайн roslyn заключается в том, что все объекты неизменяемы, поэтому вам придется возвращать новое решение.
На github есть несколько обсуждений, подтверждающих этот факт:
https://github.com/KirillOsenkov/Bliki/wiki/Roslyn-Immutable-Trees
https://github.com/dotnet/roslyn/issues/7626