Обновление решения Roslyn

#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