Подтвердить что ты не робот

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

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

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

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

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

Ответ 3

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

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

MSDN в Fusion Log Viewer

Ответ 4

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

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

Ответ 5

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

Ответ 6

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

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