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

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

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

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

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


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


Ответы (2)


arrow_upward
1
arrow_downward

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

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

arrow_upward
1
arrow_downward

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

person Mark Cidade    schedule 31.01.2011