Как я могу найти все ссылки на текущий проект и сказать, какие из них являются производными от определенного базового класса в C #? - PullRequest
1 голос
/ 11 мая 2009

Из-за политики в очень большом финансовом учреждении, в котором я работаю, я не могу использовать реализацию ActiveRecord в Castle Project, но мне так нравится шаблон, что я сам его реализовал. Это завершено, и теперь руководство ищет инструмент с графическим интерфейсом для просмотра всех классов activerecord, поиска экземпляров и управления данными.

С этой целью я создаю «браузер», который выполняет итерацию по всем классам в ссылочном проекте, и, если они получены из частичного базового класса («ActiveInstanceBase»), сделайте их доступными для проверки и изменения в сетка данных ASP.net.

Первый шаг для меня - выяснить, как перебрать все ссылки в текущем проекте (разработчики, использующие этот инструмент, добавят свои библиотеки в проект в качестве ссылок) и определить классы ActiveInstance, чтобы заполнить раскрывающийся список полностью типов для проверки.

  1. Как получить список всех ссылок для текущего проекта? Google не показывает ничего для меня на первой странице результатов по ряду запросов. Я получаю много информации о написании надстроек Visual Studio, но ничего для проверки во время выполнения.

  2. Как определить базовый класс производного типа во время выполнения, если базовый класс принимает параметр Type?

if (t.IsSubclassOf (typeof (ActiveInstance.ActiveInstanceBase))) {}

Не правильный синтаксис, и я не могу знать t во время выполнения.

Я также вынужден использовать IE6, поэтому извините, если этот пост не очень хорошо отформатирован. Заранее большое спасибо!

Ответы [ 2 ]

1 голос
/ 11 мая 2009

1) Как получить ссылки на сборки в вашем проекте

Assembly ourAssembly = Assembly.GetEntryAssembly();
AssemblyName[] refs = ourAssembly.GetReferencedAssemblies();

2) Использовать тип. IsSubclassOf () или тип. GetInterface ()

Type theType = typeof(ActiveInstance.ActiveInstanceBase<>);
foreach(Type type in assembly.GetTypes())
{
    if (type.IsSubclassOf(theType))
    { ... }
}

Это должно работать на тебя ...

0 голосов
/ 11 мая 2009

если у вас есть политические правила, запрещающие загрузку стороннего программного обеспечения, это может не сработать, но я использую .net Reflector. Это даст вам ссылки и декомпилирует код для рецензирования.

http://www.red -gate.com / продукты / отражатель /

...