Как вы можете найти, какая ссылка на проект .NET транзитивно загружает другую сборку?

#c# #.net #assemblies

#c# #.net #сборки

Вопрос:

У меня есть проект, который я пытаюсь развернуть на другом компьютере, но установка завершается неудачей, поскольку для этого требуется, чтобы сборка была установлена в GAC. Но эта сборка (System.ServiceModel.DomainServices.Хостинг 4.0.0.0) не имеет отношения к моему проекту, поэтому я пытаюсь удалить как его, так и прямую ссылку, которая его загружает.

Мой проект — напрямую зависит от-> Неизвестной ссылки — косвенно зависит от-> System.ServiceModel.DomainServices.Хостинг 4.0.0.0

Как я могу узнать, какая из прямых ссылок в моем проекте косвенно загружает эту бесполезную сборку DomainServices? Я не вижу способа сделать это с помощью отражения…

(Это общий вопрос, но если это поможет, я использую C # в .NET 4.0, Visual Studio 2010 и ClickOnce для развертывания проекта.)

Ответ №1:

Вы могли бы попробовать включить ведение журнала Fusion Logging, это позволит вам просмотреть все сбои при загрузке сборки.

Вернемся к основам: использование Fusion Log Viewer для отладки неясных ошибок загрузчика

Комментарии:

1. Это хорошее решение и помогло мне, спасибо. Однако, похоже, вам нужна установленная Visual Studio для запуска ведения журнала Fusion? Возможно ли установить ее самостоятельно, если у нас есть эта проблема на ПК без VS?

2. Это потрясающе. Я никогда не слышал о Fusion до этого поста. Моя проблема заключалась в том, что у меня был тестовый проект, который нормально компилировался, но я не мог подключиться к нему с помощью отладчика при его запуске, потому что сборки с прямыми ссылками удалялись из bin при компиляции. Я не мог разобраться с этим, пока не посмотрел на окно вывода компиляции, в котором в основном говорилось system. веб ссылался неправильно. Сетевая версия, то есть профиль клиента. Это было достаточно легко исправить, но затем я обнаружил, что задаюсь вопросом: «это winforms.app, какая ссылка на system.web?» Похоже, что id вручную искал ссылку до этого поста. v здорово, спасибо

Ответ №2:

Попробуйте найти это с помощью Reflector. Также обратите внимание, что класс Assembly имеет метод GetReferencedAssemblies , поэтому вы также сможете найти его с помощью reflection.

Комментарии:

1. Да, я знаю о сборке. GetReferencedAssemblies() но это подскажет мне только сборки, на которые из моего проекта есть прямые ссылки, что я уже знаю (и что вы также можете узнать, используя VS Debug, procexp и т.д.). Я ищу косвенные / транзитивные ссылки. Reflector удобен, если я просматриваю каждую из прямых ссылок одну за другой и изучаю ее. Есть ли более быстрый способ сделать это? Это должно быть распространенным вариантом использования.