Я пишу плагин ReSharper 7.1 Generator и должен получить список всех типов, объявленных в текущем проекте (классы, интерфейсы и структуры - IDeclaredType-s
) для метода GeneratorProviderBase<CSharpGeneratorContext>.Populate
.Получить все IDeclaredType-s в текущем проекте (для плагина ReSharper Generator)
С регулярным отражением было бы так же просто, как Assembly.GetTypes()
, но здесь это оказалось довольно сложной задачей. Есть ли способ сделать это?
Я искал высокий и низкий, документы и образцы не помогло, потом посмотрел через каждый *Extensions
и *Util
класса, но не смог найти что-нибудь полезное ...
Это, конечно, лишенная версия, все проверки и дополнительные условия и преобразования были удалены для краткости. – mbinic
Это будет очень медленно, чем больше проект, тем больше вы просматриваете каждый файл. У меня больше нет 7.1, но вы можете получить эту информацию из [Cache] ReSharper (https://confluence.jetbrains.com/display/NETCOM/4.01+Caches+%28R7%29) – citizenmatt
Спасибо для вашего входа Мэтт! Кэш - это первое, на что я смотрел, но он не казался слишком полезным с его короткими именами: во время сеанса отладки я видел, что у него было 8000+ элементов для проекта, содержащего только 2 файла cs. Большинство имен были из ссылочных ассамблей, а не классов, поэтому я чувствовал, что получить их и пройти через них будет медленно. Во всяком случае, я попробую еще раз. – mbinic