Re[2]: VS Package - как получить все файлы из солюшин
От: AlexNek  
Дата: 15.09.20 09:51
Оценка:
Здравствуйте, Михаил Романов, Вы писали:

МР>Здравствуйте, AlexNek, Вы писали:


МР>Прошу прощения за задержку, скорее всего вы уже разобрались, но на всякий случай переспрошу.

AN>>
AN>>IComponentModel componentModel = _package.GetService<SComponentModel, IComponentModel>();
            
AN>>var workspace = componentModel.GetService<VisualStudioWorkspace>();

AN>>foreach (Project project in solution.Projects)
AN>>{
AN>>   foreach (Document document in project.Documents)
AN>>   {
AN>>     ...
AN>>   }
AN>>}
AN>>


МР>Не видя общего примера судить сложно, но предположу, что вы работаете с Roslyn-овской моделью солюшена, в которой есть только файлы понятные компиляторам Roslyn (т.е. .cs, .vb и что-то там до кучи).


МР>Если же вы хотите добраться до полного солюшена, вам нужно работать через объекты самой студии. Если мне не изменяет память схема примерно такая:

МР>- как сервис (GetService(...)) получаете интерфейс DTE
МР>- у него получаете текущий Solution
МР>- перебираете Projects, а в них ProjectItems

МР>Единственное, я не пробовал это делать с новой моделью проектов, но вроде там обещали обратную совместимость, а модель проектов всё равно прячется внутри.

Спасибо большое, да с DTE можно получить всё.
Мне казалось что новая модель пришла на замену. Тем более что синтакическое дерево тоже нужно будет, хочется найти определенный элемент и заменить его (ну и свзь с редактором кода не потерять).

Еще вот не искал чем студия парсит XAML, там тоже надо будет найти элементы и заменить часть кода. Может быть знаете?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.