Как обойти доступные типы кривоватой сборки?

Рейтинг: 1Ответов: 1Опубликовано: 08.04.2011

Метод Assembly.GetTypes() возвращает список всех типов, объявленных в сборке. Однако, иногда бывает так, что некоторые зависимости для части объявленных в сборке типов недоступны, и некоторые типы не удаётся загрузить. При этом метод кидает исключение и не возвращает ничего.

Как сделать так, чтобы если некоторые типы не доступны, можно было бы просмотреть то, что удалось загрузить?

Ответы

▲ 2Принят

Странно, в MSDN сказано, что результат все равно будет возвращен, но типы, которые не удалось отрефлектить, будут возвращены как Nothing:

ReflectionTypeLoadException

Сборка содержит один или несколько типов, которые не удается загрузить. Массив, возвращаемый свойством Types этого исключения, содержит объект Type для каждого загруженного типа и значение Nothing для каждого типа, который не удалось загрузить, в то время как свойство LoaderExceptions содержит исключение для каждого типа, который не был загружен.

Соответственно, ловите этот эксепшн прямо там же, делайте необходимый роллбек для незагруженных типов и работайте с тем, что не Nothing.