Получить типы в сборке (ошибка: System.Reflection.ReflectionTypeLoadException)

Я получаю исключение типа Сведения об исключении: System.Reflection.ReflectionTypeLoadException: невозможно загрузить один или несколько запрошенных типов. Получите свойство LoaderExceptions для получения дополнительной информации. со следующим кодом:

public IEnumerable<Type> FindClassesOfType(Type assignTypeFrom, IEnumerable<Assembly> assemblies, bool onlyConcreteClasses = true)
    {
        foreach(var a in assemblies)
        {
            foreach (var t in a.GetTypes())

Мне нужно получить типы, определенные в каждой сборке, но кажется, что они не могут быть сгенерированы.

Я уже выполнил все типичные процедуры, связанные с созданием неправильной сборки, удалив dll, очистив решение, перезагрузив решение и т. д., но ничего не произошло.

Я хотел бы запросить идеи, чтобы решить эту проблему, найдя способ получить дополнительную информацию об ошибке или найти, какая сборка создает проблемы или что-то в этом роде. Текущее сообщение об исключении настолько расплывчато, что невозможно понять, в чем проблема.

ps: дополнительная информация, когда я запускаю действие перестройки, все процессы генерируются правильно, без ошибок.


person s_h    schedule 22.05.2011    source источник


Ответы (3)


Сообщение об ошибке говорит все, что вам нужно, на самом деле:

try {
    // your code
} catch (ReflectionTypeLoadException ex) {
    // now look at ex.LoaderExceptions - this is an Exception[], so:
    foreach(Exception inner in ex.LoaderExceptions) {
        // write details of "inner", in particular inner.Message
    }
}
person Marc Gravell    schedule 22.05.2011
comment
Привет @Marc-gravell, спасибо за ответ. У меня есть особая проблема с этим подходом, я использую yield return в своем коде, и невозможно включить yield в код try catch. Я нашел другой подход, используя журналы слияния с fuslogvw.exe. Появляется много модулей, но все они работают нормально в своих деталях. Не знаю, спасибо большое... - person s_h; 22.05.2011
comment
@Ssebastian_h - однако вы можете вызвать любой служебный метод, и который может использовать try/catch/finally ;p - person Marc Gravell; 22.05.2011

Если вы используете Entity Framework, проверьте, совпадает ли версия в Web.Config с ссылкой в ​​вашем проекте.

person Fernando JS    schedule 17.05.2016

Была ли DLL создана вами? На какой фреймворк вы ориентируетесь?

Я столкнулся с этой проблемой только сейчас. Даже при компиляции моих внешних библиотек с фреймворком 3.5 (который использует CLR2) DLL не может быть импортирована. Ошибка была такая же как у вас. Я решил свою проблему, перестроив свои библиотеки, ориентированные на платформу 3.0, и, похоже, теперь работает. Я без проблем оставляю свои dll в папке плагинов.

На форумах Unity много подобных проблем. а>.

Возможно, у вас уже есть решение, но оно может помочь всем, кому оно понадобится в будущем (как и мне).

С уважением!

person Rafael Brasil    schedule 17.05.2014
comment
привет @Rafael-brasil я одобрил ответ - person s_h; 18.05.2014