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

Когда в типичное приложение .NET добавляются зависимости от сторонних сборок, очень легко забыть добавить их в программу установки. Эта проблема имеет тенденцию проявляться только после установки приложения и в виде сбоя при запуске с небольшим количеством доступной полезной информации.

Каковы наилучшие инструменты и методы, чтобы узнать, какие сборки необходимо добавить в программу установки?


person GraemeF    schedule 29.09.2009    source источник


Ответы (3)


Полностью автоматизированные сборки помогают уменьшить человеческий фактор и, следовательно, количество ошибок. Если он автоматически создается каждый раз, вы знаете, что все сборки будут одинаковыми, поэтому, как только он заработает один раз, он будет работать всегда.

Мы используем такие инструменты, как MSBuild и CruiseControl.net

Если вы ищете инструменты, которые помогут вам выяснить причину сбоя, запишитесь в журнал по адресу Просмотр журнала привязки сборки (Fusion) (или fuslogvw). Если вы запустите его до запуска своего приложения, задайте расположение файла журнала и включите полное ведение журнала, он будет сообщать о любых попытках привязки сборок и перечислять все сбои.

person Simon P Stevens    schedule 29.09.2009
comment
Мое приложение создано с помощью MSBuild компанией CCNET, которая также выполняет автоматические приемочные тесты, но в настоящее время не тестирует установщик. Я полагаю, что это был бы один из подходов к обнаружению проблемы как можно раньше, но я специально прошу помощи в поиске проблемы, когда она уже возникла. - person GraemeF; 29.09.2009
comment
Значит, вы не после чего-то, что останавливает это, а после чего-то, что говорит вам, какая .dll отсутствует, когда приложение падает на клиентской машине? - person Simon P Stevens; 29.09.2009
comment
Да ну на тестовой машине сначала, надеюсь! ;) - person GraemeF; 29.09.2009
comment
Ааа, тогда я неправильно понял вопрос в первый раз. Смотрите редактирование, которое я сделал для fuslogvw. - person Simon P Stevens; 29.09.2009
comment
Я знал о fuslogvw, но надеялся на что-то более простое в использовании. Ну что ж! Спасибо. - person GraemeF; 30.09.2009

Dependency Walker — отличная небольшая утилита, которая отслеживает цепочку зависимостей от приложения или библиотеки DLL и выделяет все недостающие. На самом деле это не так уж интуитивно понятно для конечного пользователя, но, надеюсь, если вы начнете его использовать, вы сами поймаете все недостающие элементы.

http://www.dependencywalker.com/

person Coxy    schedule 29.09.2009
comment
Dependency Walker не очень полезен для сборок .Net. - person Frank Bollack; 29.09.2009

Зависит от возможностей вашего установщика. Проекты интегрированной установки VS могут автоматически подбирать любые зависимые сборки. Возможно, вы захотите проверить, есть ли у вашего установщика похожие функции.

С другой стороны, вы можете поручить своим проектам VS скопировать все зависимости в выходной каталог и просто включить все файлы оттуда в свой установщик.

person Frank Bollack    schedule 29.09.2009
comment
Я использую WiX и явно перечисляю файлы, которые нужно включить. - person GraemeF; 29.09.2009
comment
Я не знаю никаких инструментов WiX, которые могут вам помочь, поэтому вы можете придерживаться моего предложения просто взять все файлы из выходного каталога. Это самое простое, что я могу придумать. Если проект запускается из выходного каталога, он также должен после установки на целевой машине. - person Frank Bollack; 29.09.2009