Методы отражения терпят неудачу, когда типы находятся в другой сборке - PullRequest
3 голосов
/ 20 декабря 2010

Я создаю небольшой инструмент для рекурсивного анализа кодовых зависимостей.Я обнаружил проблему: если я пытаюсь получить член класса, чья сигнатура содержит ссылку на другой DLL, метод завершается ошибкой.Например, если у меня есть простой класс в Main.exe

public class MainClass  {
    public MainClass () {
        foo();
    }

    public ContainedClass GetPublicClass () {
        return new ContainedClass ();
    }

}

и ContainedClass определен в другом файле refer.dll, при попытке следующего кода он выдает FileNotFoundException в met3.ReturnType() метод причина .net не найти refer.dll.

Assembly assem = Assembly.LoadFile(@"D:\dir\Main.exe");
Type typ =  assem.GetType ("MultipleReference.MainClass");
MethodInfo met3 = typ.GetMethod ("GetPublicClass");
met3.ReturnType.ToString ();

Есть ли способ указать, где искать dll?

Заранее спасибо и извините за мой английский.

1 Ответ

4 голосов
/ 20 декабря 2010

Используйте LoadFrom вместо LoadFile , поскольку оно также разрешает и загружает зависимые сборки. Цитирование документации:

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

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