2011-01-05 2 views
23

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

System.IO.FileNotFoundException : Could not load file or assembly 'core, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.

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

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

+0

Как я не уверен, так что я не представит ответ. Отсутствующий .DLL не будет вызывать IOexception. Скорее всего, DLL читает какой-то файл (config или что-то еще), и он отсутствует. Вероятно, вы должны проверить руководство для этого IKVM. –

+2

Тег «сборка» предназначен для программирования на языке ассемблера. Я удалил его, надеюсь, вы не против. – Jester

+0

Отличная идея, но я думаю, вы забыли добавить тег ikvm, который лучше всего подходит для этого сообщения;) –

ответ

20

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

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

2

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

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

+7

Зависимость ходок разрешит собственные зависимости. Это похоже на проблему с управляемой зависимостью. –

5

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

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

MSDN on Fusion Log Viewer

0

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

6

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

Debug Could not load file or assembly or one of its dependencies error with Process Monitor

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

0

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

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

Смежные вопросы