it-swarm.com.ru

Как отладить ошибки выполнения "Не удалось загрузить файл или сборку"?

У меня есть проект, который использует библиотеку Java, преобразованную с использованием IKVM . Я добавил созданную DLL плюс все возможные библиотеки IKVM в качестве ссылок на мой проект, но когда я запускаю его, я получаю следующую ошибку времени выполнения:

System.IO.FileNotFoundException: не удалось загрузить файл или ядро ​​сборки, версия = 0.0.0.0, культура = нейтральная, PublicKeyToken = null 'или одна из его зависимостей. Система не может найти указанный файл.

Я не совсем уверен, как отладить эту ошибку. Есть ли способ точно узнать, какой тип отсутствует? Из описания я думаю, что это сгенерированный DLL (из библиотеки Java), но я правильно добавил его в качестве ссылки.

Что еще я сделал не так?

26
Wookai

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

Кроме того, Process Monitor очень полезен для выявления общих проблем с загрузкой файлов.

21
Tim Barrass

Простое переключение между этим средством просмотра зависимостей и средством просмотра журнала fusion не очень хорошо работает для приложений, которые имеют собственный и управляемый код вместе или выполняют динамическую загрузку собственного кода. Вот хороший пост, объясняющий шаг за шагом, как решать отсутствующие (или недействительные права) ошибки сборки с помощью монитора процессов, который охватывает эти сценарии:

Отладка Не удалось загрузить файл или сборку или ошибку одной из их зависимостей с Process Monitor

Пост также включает в себя инструмент для автоматизации некоторых из этой задачи, а также

6
devshorts

Вы можете диагностировать это с помощью Fusion Log Viewer (доступно в Microsoft SDK) . Запустите его в Администраторе и активируйте журнал в Настройках.

Он будет регистрировать всю информацию, касающуюся загрузки ваших ссылок (и всех их ссылок) . Он явно сообщит вам, какая ссылка отсутствует, и где он ее искал.

MSDN в Fusion Log Viewer

5
Nekresh

Существует программа под названием Dependency Walker , которая позволяет вам видеть зависимости данного PE-файла (dll, exe, ocx ...).

Эта ошибка действительно раздражает, ее очень трудно отладить. Вы должны убедиться, что ваша dll присутствует, а также ЛЮБОЙ зависимости у этой dll. Этот ключевой момент, как правило, начинается с головной боли.

2
Eric

Используя ProcessMonitor (из пакета Sysinternals Suite), вы можете увидеть, какой DLL ваш процесс ищет непосредственно перед выдачей исключения.

0
Liran

Средство обхода зависимостей статически разрешает все библиотеки DLL, необходимые для собственного PE-файла, и отмечает отсутствующие зависимости, тогда как Fusion Log Viewer обнаруживает проблемы привязки сборки в управляемом коде во время выполнения. Для управляемого кода .Net, который динамически загружает собственные библиотеки DLL, этих инструментов недостаточно.

Вот сообщение в блоге о том, как можно использовать Process Monitor для отладки проблем «Не удалось загрузить файл или сборку»: https://www.codeproject.com/Articles/560816/Trou устранение неисправностей-dependency-resolution-problems-usi

0
Mike S.