.Assembly / GetExportedTypes создает исключение FileNotFoundException - PullRequest
4 голосов
/ 22 сентября 2009

Если я запускаю этот код:

var myAsm = typeof(MyType).Assembly;
var types = myAsm.GetExportedTypes();

Я получаю:

System.IO.FileNotFoundException : Could not load file or assembly ....

, который перечисляет зависимую сборку. Тем не менее, если я сделаю:

var myAsm = Assembly.LoadFrom(...);  // DLL containing the same assembly as above
var types = myAsm.GetExportedTypes();

отлично работает.

Я действительно предпочел бы первый метод, так как он чище ... зачем мне загружать уже загруженную DLL? Любой совет?

Ответы [ 3 ]

3 голосов
/ 12 ноября 2009

Это не совсем отвечает на ваш вопрос, но у меня просто была связанная с этим проблема, и я подумал, что опубликую некоторую информацию, чтобы помочь другим, которые могут наткнуться на это, как я!

Assembly имеет

.LoadFile(string path)

и

.LoadFrom(string path)

LoadFile сгенерирует FileNotFoundException, если загружать сборку из некоторой удаленной (не совпадающей с dll) папки. Вам нужно использовать LoadFrom, как вы делали выше;)

1 голос
/ 22 сентября 2009

Вы пробовали

System.Reflection.Assembly.GetExecutingAssembly();

Или

System.Reflection.Assembly.GetAssembly(typeof(MyType));

Причина, по которой ваш второй работает, заключается в том, что вы на самом деле загружаете .dll. Когда вы вызываете typeof (MyType) .Assembly, он понятия не имеет, какое отражение DLL следует использовать. Вот почему GetExecutingAssembly или GetAssembly(tyepof(MyType)) должны работать.

0 голосов
/ 29 февраля 2016

Если вы пытаетесь загрузить сборку, которая НЕ в ExecutingAssembly, и эта DLL имеет ссылки на объекты более низкого уровня, такие как MyProj.Interfaces или MyProj.BaseClasses или элементы управления Infragistics или что-то подобное .. .То библиотеки DLL также должны быть доступны в той же папке, из которой вы загружаете исходную библиотеку DLL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...