C # - сравнение двух .net DLL с использованием отражения - PullRequest
4 голосов
/ 11 июля 2011

Я хочу сравнить два одинаковых .net dll, которые расположены в разных местах.Следовательно, я загружаю DLL, используя System.Reflection.Assembly.LoadFile(filename) вместо System.Reflection.Assembly.LoadFrom(filename).Но DLL-библиотеки .Net, которые нужно сравнить, имеют ссылки на другие сборки (которые находятся в той же папке, что и соответствующие DLL)Загрузка dll с использованием LoadFile(filename) с последующим GetTypes() выбрасывает ReflectionTypeLoadException.Как мне загрузить два одинаковых dll, используя отражение, чтобы получить их типы и сравнить?

Ответы [ 3 ]

2 голосов
/ 11 июля 2011

Используйте ReflectionOnlyLoad ot ReflectionOnlyLoadFrom методы

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

1 голос
/ 11 июля 2011

Если вы просто хотите сравнить две сборки, вам, безусловно, не нужно загружать их.Я бы предложил более статичный подход, основанный на Mono.Cecil .

. Он позволит вам сравнивать модули, типы, методы - даже на уровне команд, простым способом.

Документацию по началу работы можно найти здесь:

https://github.com/jbevain/cecil/wiki/HOWTO

1 голос
/ 11 июля 2011

Вы можете поймать ReflectionTypeLoadException, чтобы увидеть список типов, которые были загружены правильно.Для получения более подробной информации см. Следующие ссылки:

Если вы знаете, где можно найти недостающие сборки, вы также можете обработать событие AppDomain.AssemblyResolve, чтобы «помочь» с поиском и загрузкой требуемогозависимостей.

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