Assembly.GetTypes () - Получить типы, которые не загружаются

Assembly.GetTypes () выдает исключение ReflectionTypeLoadException, когда есть типы, которые не могут быть загружены.

Это исключение имеет свойство Types [], в котором перечислены успешно загруженные типы, и свойство LoaderExceptions [], в котором перечислены исключения для типов, которые не удалось загрузить.

Мой вопрос: как мне получить сами типы, соответствующие LoaderExceptions?

Изменить: я действительно ищу имя типа, который не удалось загрузить. Приносим извинения за возможные недоразумения.


person Peter Drier    schedule 04.04.2012    source источник
comment
вам нужно будет разрешить LoaderExceptions. кто они такие?   -  person Mike Zboray    schedule 04.04.2012
comment
вы смотрели на этот stackoverflow.com/questions/2658275/ - это кажется странной ошибкой, что именно вы делаете, откуда взялась сборка, ваша или сторонняя и т. д. Пробовали ли вы рефлектор или что-то подобное?   -  person NSGaga-mostly-inactive    schedule 04.04.2012
comment
LoaderExceptions в этом случае являются FileLoadExceptions, и это происходит только на машине конечного пользователя, к которой у меня нет доступа. FileLoadException находится в сторонней dll. Мне буквально нужно сделать производственную сборку и заставить этого парня запустить ее и потерпеть неудачу, просто чтобы получить больше журналов, чтобы я мог отлаживать. Это было 3 раунда, чтобы получить столько информации.   -  person Peter Drier    schedule 17.04.2012


Ответы (2)


Это просто невозможно. CLR не удалось создать объекты Type, поэтому вы получили набор LoaderExceptions. Просто не существует Type объекта, описывающего Type, который не удалось загрузить.

person JaredPar    schedule 04.04.2012
comment
Справедливо, я должен был сформулировать это как «Как мне получить имена типов, которые не удалось загрузить?» В этом случае LoaderExceptions имеет FileLoadExceptions, который имеет связанный журнал слияния, но, увы, ничего, что на самом деле говорит о том, что тип Peters.BrokenClass не удалось загрузить из-за этого исключения: .. только эта сборка Something.From.MS.dll не удалось загрузить .. . - person Peter Drier; 17.04.2012
comment
@PeterDrier, это разочаровывающее исключение. Обычно я сразу использую fuslogvw для отслеживания ошибок, поскольку иногда в нем содержится немного более полезной информации msdn.microsoft.com/en-us/library/e74a18c4 (v = VS.71) .aspx - person JaredPar; 17.04.2012
comment
Если бы только у меня был доступ к машине, в которой возникла проблема. Это вне поля зрения, и пользователь не из тех, кто нам больше нравится. Единственный реальный вариант - это выполнить дополнительную отладку кода и вернуться на сервер с достаточным количеством результатов, чтобы, надеюсь, разобраться в проблеме. - person Peter Drier; 17.04.2012

Эта ошибка чаще всего возникает, когда Dll, которую вы загружаете из местоположения, уже упоминается в вашем приложении или родительском приложении. Если Dll уже находится в ссылке, выполните цикл Assemblies вашего приложения.

foreach (var asm in AppDomain.CurrentDomain.GetAssemblies())
{
      if (asm.ManifestModule.FullyQualifiedName.EndsWith("YourDllName.dll"))
      {
            foreach (var Type in asm.GetTypes())
            {
                  // Apply your logic here
            }                
            break;
      }
}
person Sarath KS    schedule 18.11.2014