2009-10-08 2 views
3

В рамках нашей миграции с .net 1.1 на .net 3.5 нам пришлось изменить несколько DLL-файлов vender.«System.IO.FileNotFoundException: не удалось загрузить файл или сборку», когда сборка действительно существует

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

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

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

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

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

Конкретная поставщика в данном случае DTSearch и это boundry где выкинут ошибка:

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

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

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

ответ

1

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

1

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

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

+0

Ну, это усложняет ситуацию. DLL, которую я пытаюсь загрузить, говорит, что не хватает двух DLL, о которых я никогда не слышал (IESHIMS.DLL и WER.DLL, если это что-то означает), но в то же время версия DLL версии .net 1.1 также пропуская эти компоненты и работая нормально. –

+0

Эти 2 сборки, скорее всего, красные сельди - я думаю, что большинство сборок, которые я открываю, пропускают те 2, даже если они работают нормально. – Justin

+0

Итак, DLL в порядке? –

4

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

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