Обнаружение того, какие сборки загружают какие зависимости (во время выполнения)

Какой самый простой способ узнать, какая сборка вызывает загрузку определенных зависимостей во время выполнения? У меня где-то есть случайная ссылка на старую сборку, в одной из более чем 100 сборок, которые загружаются как часть нашего приложения.

Используя FUSLOGVW, я вижу, что старая сборка загружен, но журналы не говорят мне, какая сборка вызвала его загрузку. Я использовал CheckASM, который позволяет мне просматривать зависимости основной сборки и исследовать дерево, но все в порядке.

Так что это должна быть сборка, которая динамически загружается во время выполнения, или где-то файл конфигурации. Но я не могу найти его для жизни меня.

Интересно, есть ли более разумный способ сделать это?


person James Crowley    schedule 31.01.2011    source источник


Ответы (2)


Возможно, вы можете подписаться на событие AssemblyResolve во всех доменах приложений (если их не слишком много). ResolveEventArgs содержит специальное поле для этого — ResolveEventArgs.RequestingAssembly

person Andrey Taptunov    schedule 31.01.2011
comment
Да, просто удалите DLL, чтобы событие сработало. И просто посмотрите на стек вызовов, чтобы увидеть, как он был вызван. - person Hans Passant; 31.01.2011

Как насчет удаления (или переименования) сборки, чтобы увидеть, не возникает ли исключение в точке, где программа пытается ее загрузить? Трассировка стека должна содержать ссылку на метод из вызывающей сборки.

person Mark Cidade    schedule 31.01.2011