Не видя общего примера судить сложно, но предположу, что вы работаете с Roslyn-овской моделью солюшена, в которой есть только файлы понятные компиляторам Roslyn (т.е. .cs, .vb и что-то там до кучи).
Если же вы хотите добраться до полного солюшена, вам нужно работать через объекты самой студии. Если мне не изменяет память схема примерно такая:
— как сервис (GetService(...)) получаете интерфейс DTE
— у него получаете текущий Solution
— перебираете Projects, а в них ProjectItems
Единственное, я не пробовал это делать с новой моделью проектов, но вроде там обещали обратную совместимость, а модель проектов всё равно прячется внутри.
Re[2]: VS Package - как получить все файлы из солюшин
Здравствуйте, Михаил Романов, Вы писали:
МР>Здравствуйте, AlexNek, Вы писали:
МР>Прошу прощения за задержку, скорее всего вы уже разобрались, но на всякий случай переспрошу. AN>>
МР>Не видя общего примера судить сложно, но предположу, что вы работаете с Roslyn-овской моделью солюшена, в которой есть только файлы понятные компиляторам Roslyn (т.е. .cs, .vb и что-то там до кучи).
МР>Если же вы хотите добраться до полного солюшена, вам нужно работать через объекты самой студии. Если мне не изменяет память схема примерно такая: МР>- как сервис (GetService(...)) получаете интерфейс DTE МР>- у него получаете текущий Solution МР>- перебираете Projects, а в них ProjectItems
МР>Единственное, я не пробовал это делать с новой моделью проектов, но вроде там обещали обратную совместимость, а модель проектов всё равно прячется внутри.
Спасибо большое, да с DTE можно получить всё.
Мне казалось что новая модель пришла на замену. Тем более что синтакическое дерево тоже нужно будет, хочется найти определенный элемент и заменить его (ну и свзь с редактором кода не потерять).
Еще вот не искал чем студия парсит XAML, там тоже надо будет найти элементы и заменить часть кода. Может быть знаете?
Re[3]: VS Package - как получить все файлы из солюшин
Здравствуйте, AlexNek, Вы писали:
AN>Спасибо большое, да с DTE можно получить всё. AN>Мне казалось что новая модель пришла на замену. Тем более что синтакическое дерево тоже нужно будет, хочется найти определенный элемент и заменить его (ну и свзь с редактором кода не потерять).
На сколько я понимаю, нет, модель Workspaces в Roslyn, идет в параллель (и наверное это логично — зачем, им те же элементы XAML, или вообще какой-нибудь custom item — они ведь всё равно не смогут с ним ничего сделать, и этот элемент остается на совести системы сборки).
Вообще надо смотреть, на общую задачу — что именно вы хотите сделать.
Потому что до кода можно добраться несколькими путями:
— через модель Roslyn
— через CodeModel в VisualStudio (другой вопрос — через неё много не сделаешь).
AN>Еще вот не искал чем студия парсит XAML, там тоже надо будет найти элементы и заменить часть кода. Может быть знаете?
Увы...
Я даже подозреваю, что у самой студии ничего публичного для работы с XAML нет. У них даже обычный редактор XML расширить — это скачки на одной ноге (я в свое время смотрел, как это делал Мадс Кристенсен — и повторят даже пытаться не стал).
Я просто исхожу из того, что:
— для чистой работы с XAML есть пространство System.Xaml (хотя там по-моему далеко не всё, я просто помню, что народ, который пытался портировать Workflow Foundation на Core уперся именно в XAML. Хотя сейчас может всё и лучше).
— для расширений редакторов, которые манипулируют XAML предусмотрены свои Extensions в каждой технологии (типа Aborners в WPF)
Но поискать можно. Только скорее всего это будет "подпольный" вариант
Re[4]: VS Package - как получить все файлы из солюшин
Здравствуйте, Михаил Романов, Вы писали:
МР>Здравствуйте, AlexNek, Вы писали:
AN>>Спасибо большое, да с DTE можно получить всё. AN>>Мне казалось что новая модель пришла на замену. Тем более что синтакическое дерево тоже нужно будет, хочется найти определенный элемент и заменить его (ну и свзь с редактором кода не потерять). МР>На сколько я понимаю, нет, модель Workspaces в Roslyn, идет в параллель (и наверное это логично — зачем, им те же элементы XAML, или вообще какой-нибудь custom item — они ведь всё равно не смогут с ним ничего сделать, и этот элемент остается на совести системы сборки). МР>Вообще надо смотреть, на общую задачу — что именно вы хотите сделать.
ну например, найти все регионы и отредактировать их содержание и в cs и в XAML. Это просто пример
Re[2]: VS Package - как получить все файлы из солюшин
Здравствуйте, Михаил Романов, Вы писали:
МР>Здравствуйте, AlexNek, Вы писали:
МР>Не видя общего примера судить сложно, но предположу, что вы работаете с Roslyn-овской моделью солюшена, в которой есть только файлы понятные компиляторам Roslyn (т.е. .cs, .vb и что-то там до кучи).
МР>Если же вы хотите добраться до полного солюшена, вам нужно работать через объекты самой студии. Если мне не изменяет память схема примерно такая: МР>- как сервис (GetService(...)) получаете интерфейс DTE МР>- у него получаете текущий Solution МР>- перебираете Projects, а в них ProjectItems
МР>Единственное, я не пробовал это делать с новой моделью проектов, но вроде там обещали обратную совместимость, а модель проектов всё равно прячется внутри.
Добраться до синтаксического дерева из DTE пока не получается, приходится в параллель делать
Re[4]: VS Package - как получить все файлы из солюшин
Здравствуйте, Михаил Романов, Вы писали:
МР>Я даже подозреваю, что у самой студии ничего публичного для работы с XAML нет. У них даже обычный редактор XML расширить — это скачки на одной ноге (я в свое время смотрел, как это делал Мадс Кристенсен — и повторят даже пытаться не стал).
Может быть и есть. Только вот с публичностью и документацией реально проблема.
XML я сам парсил для автокомплита через Microsoft.XmlEditor.dll (он свой для каждой студии, и документации так-то негусто). Добывается через:
Здравствуйте, AlexNek, Вы писали:
AN>Добраться до синтаксического дерева из DTE пока не получается, приходится в параллель делать
А из DTE и не получится, скорее всего. DTE ведь в этой части не дорабатывали бог знает сколько лет.
И обратное (из Workspace в объекты DTE) тоже мало вероятно — на сколько я помню у Roslyn весь API никак не завязан на студию.
Т.е., скорее всего особо вариантов-то и нет — только сверять на уровне путей к файлам (кстати а так работает?)
Re[5]: VS Package - как получить все файлы из солюшин
Здравствуйте, AlexNek, Вы писали:
AN>ну например, найти все регионы и отредактировать их содержание и в cs и в XAML. Это просто пример
Сильно конкретнее не стало, но, наверное, я понял. Что-то типа "есть XAML и парный ему рукописный C# код и надо автоматом поменять в обоих местах"?
Ну в таком варианте, наверное, да, просто не сделать иначе.
Т.е. если бы можно было бы свести к варианту "Меняем XAML, а потом допиливаем кодогенерацию по нему", можно было бы посмотреть другие варианты.
Re[6]: VS Package - как получить все файлы из солюшин
Здравствуйте, Михаил Романов, Вы писали:
МР>Здравствуйте, AlexNek, Вы писали:
AN>>ну например, найти все регионы и отредактировать их содержание и в cs и в XAML. Это просто пример МР>Сильно конкретнее не стало, но, наверное, я понял. Что-то типа "есть XAML и парный ему рукописный C# код и надо автоматом поменять в обоих местах"?
из cs нужно добыть ABC и редактировать его
#region ABC
#end region
из ХАМЛа тоже самое, связи между ними нет
МР>Ну в таком варианте, наверное, да, просто не сделать иначе.
МР>Т.е. если бы можно было бы свести к варианту "Меняем XAML, а потом допиливаем кодогенерацию по нему", можно было бы посмотреть другие варианты.
Не, cs и XAML совершенно независимы, просто как в коде через Рослин сделать понятно, а с XAML надо возится.
Просто Рослин еще линию и колонку в файле выдает, можно будет в редакторе нужное место подсветить.
Re[5]: VS Package - как получить все файлы из солюшин
Здравствуйте, bnk, Вы писали:
bnk>Здравствуйте, Михаил Романов, Вы писали:
МР>>Я даже подозреваю, что у самой студии ничего публичного для работы с XAML нет. У них даже обычный редактор XML расширить — это скачки на одной ноге (я в свое время смотрел, как это делал Мадс Кристенсен — и повторят даже пытаться не стал).
bnk>Может быть и есть. Только вот с публичностью и документацией реально проблема. bnk>XML я сам парсил для автокомплита через Microsoft.XmlEditor.dll (он свой для каждой студии, и документации так-то негусто). Добывается через:
bnk>
Здравствуйте, Михаил Романов, Вы писали:
МР>Здравствуйте, AlexNek, Вы писали:
AN>>Добраться до синтаксического дерева из DTE пока не получается, приходится в параллель делать МР>А из DTE и не получится, скорее всего. DTE ведь в этой части не дорабатывали бог знает сколько лет. МР>И обратное (из Workspace в объекты DTE) тоже мало вероятно — на сколько я помню у Roslyn весь API никак не завязан на студию.
МР>Т.е., скорее всего особо вариантов-то и нет — только сверять на уровне путей к файлам (кстати а так работает?)
Похоже что работает, но пути нужно сохранять. Хотя надо еще подумать, может быть можно только локально это делать если больше не понадобится.
Теперь следущий этап — связь с редактором и изменение кода