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

<p>у меня есть проект, который использует библиотеку java, преобразованную с использованием <a href="http://www.ikvm.net/">ikvm</a> . я добавил созданную dll плюс все возможные библиотеки ikvm в качестве ссылок на мой проект, но когда я запускаю его, я получаю следующую ошибку времени выполнения:</p><blockquote> <p>system.io.filenotfoundexception: не удалось загрузить файл или ядро сборки, версия = 0.0.0.0, культура = нейтральная, publickeytoken = null 'или одна из его зависимостей. система не может найти указанный файл.</p> </blockquote><p>я не совсем уверен, как отладить эту ошибку. есть ли способ точно узнать, какой тип отсутствует? из описания я думаю, что это сгенерированный dll (из библиотеки java), но я правильно добавил его в качестве ссылки.</p><p>что еще я сделал не так?</p>

<p>вы можете использовать <a href="http://msdn.microsoft.com/en-us/library/e74a18c4(v=vs.71).aspx">fusion log viewer</a> для устранения проблем загрузки сборки в приложениях .net.</p><p>кроме того, <a href="http://technet.microsoft.com/en-us/sysinternals/bb896645">process monitor</a> очень полезен для выявления общих проблем с загрузкой файлов.</p>

<p>простое переключение между этим средством просмотра зависимостей и средством просмотра журнала fusion не очень хорошо работает для приложений, которые имеют собственный и управляемый код вместе или выполняют динамическую загрузку собственного кода. вот хороший пост, объясняющий шаг за шагом, как решать отсутствующие (или недействительные права) ошибки сборки с помощью монитора процессов, который охватывает эти сценарии:</p><p> <a href="https://web.archive.org/web/20130328034650/http://tech.blinemedical.com/debug-could-not-load-file-or-assembly-or-one-of-its-dependencies/">отладка не удалось загрузить файл или сборку или ошибку одной из их зависимостей с process monitor</a> </p><p>пост также включает в себя инструмент для автоматизации некоторых из этой задачи, а также</p>

<p>вы можете диагностировать это с помощью fusion log viewer (доступно в microsoft sdk) . запустите его в администраторе и активируйте журнал в настройках.</p><p>он будет регистрировать всю информацию, касающуюся загрузки ваших ссылок (и всех их ссылок) . он явно сообщит вам, какая ссылка отсутствует, и где он ее искал.</p><p> <a href="http://msdn.microsoft.com/en-us/library/e74a18c4%28v=vs.100%29.aspx">msdn в fusion log viewer</a> </p>

<p>существует программа под названием <a href="http://www.dependencywalker.com/">dependency walker</a> , которая позволяет вам видеть зависимости данного pe-файла (dll, exe, ocx ...).</p><p>эта ошибка действительно раздражает, ее очень трудно отладить. вы должны убедиться, что ваша dll присутствует, а также <em>любой зависимости у этой dll</em>. этот ключевой момент, как правило, начинается с головной боли.</p>

<p>используя <a href="http://technet.microsoft.com/en-us/sysinternals/bb896645">processmonitor</a> (из пакета sysinternals suite), вы можете увидеть, какой dll ваш процесс ищет непосредственно перед выдачей исключения.</p>

<p>средство обхода зависимостей статически разрешает все библиотеки dll, необходимые для собственного pe-файла, и отмечает отсутствующие зависимости, тогда как fusion log viewer обнаруживает проблемы привязки сборки в управляемом коде во время выполнения. для управляемого кода .net, который динамически загружает собственные библиотеки dll, этих инструментов недостаточно.</p><p>вот сообщение в блоге о том, как можно использовать process monitor для отладки проблем «не удалось загрузить файл или сборку»: <a href="https://www.codeproject.com/articles/560816/troubleshooting-dependency-resolution-problems-usi">https://www.codeproject.com/articles/560816/trou устранение неисправностей-dependency-resolution-problems-usi</a> </p>