Поиск всех зависимостей сборки, стиль Reflector - PullRequest
4 голосов
/ 28 января 2009

Я создаю сборку на лету, используя Reflection.Emit, а затем сохраняю ее. Он содержит один тип и статический метод Main ().

.NET достаточно любезен, чтобы автоматически ссылаться на требуемую сборку. Однако в Main () есть вызов метода из другой сборки, и на него не ссылаются стандартным способом.

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

Отражатель может обнаружить это и показывает эту дополнительную сборку в списке «зависит». Как я могу получить эти неявные зависимости, используя Reflection API?

Спасибо

Ответы [ 3 ]

10 голосов
/ 28 января 2009

Спасибо за ответы, ребята, мне удалось решить проблему.

Вот что происходит:

AssemblyBuilder builder = ... // создать сборку

builder.GetReferencedAssemblies (); => Он НЕ вернет ссылку на сборку, используемую в теле метода, даже если я уже вызвал Save () - похоже, он возвращает только сборки, загруженные в память.

Assembly.

7 голосов
/ 28 января 2009

Вы пробовали Assembly.GetReferencedAssemblies? Возвращает AssemblyName указанных сборок.

0 голосов
/ 28 января 2009

Hm ... Свойство Assembly System.Type, очевидно, возвращает сборку, которая определяет тип.

Если у вас нет абсолютно никакого контроля / знания о IL в этом методе Main (), вам придется проанализировать только что сгенерированный IL и проверить, присутствуют ли все упомянутые типы.

Гораздо более реалистичным является ручное отслеживание всех типов, участвующих в передаче вызова и callvirt.

...