Как отладить ошибки во время выполнения «Не удалось загрузить файл или сборку»? - PullRequest
27 голосов
/ 05 января 2011

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

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

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

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

Ответы [ 6 ]

21 голосов
/ 05 января 2011

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

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

6 голосов
/ 20 января 2013

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

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

В пост также включен инструмент для автоматизации некоторых из этих задач

5 голосов
/ 05 января 2011

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

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

MSDN в Fusion Log Viewer

2 голосов
/ 05 января 2011

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

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

0 голосов
/ 25 декабря 2016

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

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

0 голосов
/ 05 января 2011

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

...