Динамическая загрузка DLL
От: Аноним  
Дата: 08.04.10 09:43
Оценка:
Здравствуйте!
Есть DLL, в ней один класс.
Делаю так:
Assembly asm = Assembly.LoadFile(fileName);
foreach (Type type in asm.GetTypes())
......

Все работает.
Добавляю в эту DLL UserControl, после чего на строке
foreach (Type type in asm.GetTypes())
вываливает исключение:
Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information.

Как это понимать? И можно ли как то в этой библиотеке сохранить UserControl?
Re: Динамическая загрузка DLL
От: Мишень-сан  
Дата: 08.04.10 10:11
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте!

А>Есть DLL, в ней один класс.
А>Делаю так:
А> Assembly asm = Assembly.LoadFile(fileName);
А> foreach (Type type in asm.GetTypes())
А>......

А>Все работает.

А>Добавляю в эту DLL UserControl, после чего на строке
А> foreach (Type type in asm.GetTypes())
А>вываливает исключение:
А>Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information.

А>Как это понимать? И можно ли как то в этой библиотеке сохранить UserControl?


Retrieve the LoaderExceptions property for more information.

Также проверьте, чтобы и у приложения, и у DLL стояла в референсах System.Windows.Forms.dll
Re[2]: Динамическая загрузка DLL
От: Аноним  
Дата: 08.04.10 10:46
Оценка:
Здравствуйте, Мишень-сан, Вы писали:

МС>Retrieve the LoaderExceptions property for more information.

А что тут надо сделать ?

МС>Также проверьте, чтобы и у приложения, и у DLL стояла в референсах System.Windows.Forms.dll

Стоит
Re[3]: Динамическая загрузка DLL
От: Аноним  
Дата: 08.04.10 10:59
Оценка:
Как выяснилось, исключение вызывается только тогда, ктогда простой класс имеет пропертю:

private UserControl1 uc1;

public UserControl
{
return this.uc1;
}
Re: Динамическая загрузка DLL
От: zhech  
Дата: 08.04.10 12:42
Оценка:
Может, необходимо отрабатывать AppDomain.CurrentDomain.AssemblyResolve?
Re[4]: Динамическая загрузка DLL
От: senglory  
Дата: 01.09.10 22:45
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Как выяснилось, исключение вызывается только тогда, ктогда простой класс имеет пропертю:


А>private UserControl1 uc1;


А>public UserControl

А>{
А> return this.uc1;
А>}

И как Вы пофиксили эту проблему? А просто налетел на нее в VS 2010 при компиляции Workflow проекта под .NET 4.0
Re[5]: Динамическая загрузка DLL
От: wety Россия  
Дата: 02.09.10 05:04
Оценка:
Здравствуйте, senglory, Вы писали:

Пока данную проблему не решил. Ищу метод борьбы с этой ошибкой в гугле.
Re[3]: Динамическая загрузка DLL
От: xumix  
Дата: 02.09.10 09:16
Оценка: +1
Здравствуйте, <Аноним>, Вы писали:

А>Здравствуйте, Мишень-сан, Вы писали:


МС>>Retrieve the LoaderExceptions property for more information.

А>А что тут надо сделать ?

Нужно словить Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information.
Далее в дебаггере развернуть свойства этого исключения и посмотреть то, что находится в свойстве LoaderExceptions. Думаю, все вопросы решатся.
... << RSDN@Home 1.2.0 alpha 4 rev. 1476>>
Re: Динамическая загрузка DLL
От: knst Россия  
Дата: 04.09.10 20:56
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте!

А>Есть DLL, в ней один класс.
А>Делаю так:
А> Assembly asm = Assembly.LoadFile(fileName);
А> foreach (Type type in asm.GetTypes())
А>......

А>Все работает.

А>Добавляю в эту DLL UserControl, после чего на строке
А> foreach (Type type in asm.GetTypes())
А>вываливает исключение:
А>Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information.

А>Как это понимать? И можно ли как то в этой библиотеке сохранить UserControl?


Если цель — достать свой класс, то можно просто отловить ReflectionTypeLoadException и взять у него Types там будет массив с null вместо тех типов, которые загрузить не получилось.
Что-то вроде

try{
   types=asm.GetExportedTypes(); 
}catch(ReflectionTypeLoadException e){
   types=e.Types.Where(t=>t!=null).ToArray();
}


Причина ReflectionTypeLoadException, как правило, в том, что анализируемая сборка референсит, другую, которой нет и один из типов использует классы этой другой сборки.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.