System.IO.FileNotFoundException: не удалось загрузить файл или сборку, хотя сборка действительно существует.

В рамках нашего перехода с .net 1.1 на .net 3.5 нам пришлось заменить несколько библиотек DLL продавца.

Один из них доставляет нам проблемы только в 1 месте из 4 мест, где мы его используем:

Проблемным местом является проект формы Windows, который использует отражение для динамической загрузки некоторых библиотек DLL, которые запускают длительные процессы. Один из этих длительных процессов — это агент, который полагается на одну из наших библиотек DLL продавца.

Мы получаем исключение отсутствующей сборки в тот момент, когда мы впервые вводим функцию, которая ссылается на библиотеку. Я уже проверил такие глупости, как будто мы забыли перенести ссылку из старой версии в новую, но это не так. Я также проверил каталог bin проекта, и сборка там.

Кто-нибудь сталкивался с ситуацией, когда среда выполнения .net 2.0 отказывается загружать такую сборку? И если да, то как мы можем решить эту проблему.

Дополнительная информация:

Конкретным поставщиком в этом случае является dtSearch, и это граница, на которой возникает ошибка:

Private Sub BuildIndex()
    SetIndexOptions()
    ExecuteIndexJob()
End Sub

Private Sub SetIndexOptions()
    'Body removed for brevity
End Sub

Ссылка на библиотеку содержится в SetIndexOptions. BuildIndex() вводится, но исключение возникает при вызове SetIndexOptions. Функция фактически никогда не вводится.


person Evan Larkin    schedule 08.10.2009    source источник


Ответы (3)


Если у вас по-прежнему возникают проблемы, вы можете использовать средство просмотра журнала привязки сборки (Fuslogvw.exe ), чтобы определить, какие сборки загружаются вашим приложением. Этот инструмент является частью .NET Framework. Это предоставит вам подробную информацию обо всех зависимых сборках.

Я использовал это в прошлом при работе со сторонними сборками, очень полезно

person Rohan West    schedule 08.10.2009

Исключение FileNotFoundException может возникнуть, даже если сборка существует, если не удалось загрузить одну из зависимых сборок.

Попробуйте использовать Dependency Walker, чтобы проверить наличие всех зависимых сборок.

person Justin    schedule 08.10.2009
comment
Что ж, это все усложняет. DLL, которую я пытаюсь загрузить, говорит, что в ней отсутствуют две библиотеки DLL, о которых я никогда не слышал (IESHIMS.DLL и WER.DLL, если это что-то значит), но в то же время версия DLL .net 1.1 также отсутствуют эти компоненты и функционировал нормально. - person Evan Larkin; 09.10.2009
comment
Эти две сборки, скорее всего, являются отвлекающим маневром - я думаю, что в большинстве сборок, которые я открываю, отсутствуют эти две, даже если они работают нормально. - person Justin; 09.10.2009
comment
Да - согласно Dependency Walker. Попробуйте вести журнал слияния или, возможно, использовать Reflector, чтобы просмотреть и открыть все сборки, на которые есть ссылки. - person Justin; 10.10.2009

Оказывается, параметр компиляции по умолчанию изменился с VS2003 на VS2008, и он компилировался с неправильной разрядностью :\ Теперь я чувствую себя немного глупо!

person Evan Larkin    schedule 20.10.2009