Не удалось загрузить исключение сборки при использовании Assembly.LoadFile

#c# #reflection #dll #gac

#c# #отражение #dll #gac

Вопрос:

вот мой сценарий:

У меня есть три проекта: две библиотеки DLL и одно консольное приложение, давайте назовем их foo.dll , строка.dll и console.exe . Console.exe загружает foo.dll с использованием Assembly.LoadFile(@»c:foo.dll «). Foo.проект dll имеет ссылку на bar.dll и использует класс. Console.exe загружает foo.dll в порядке, проблема возникает при foo.dll пытается использовать bar.класс dll. Я получаю сообщение «не удалось загрузить сборку:»bar.dll «бла-бла-бла исключение.

Некоторые моменты:

  • Все проекты имеют строгие имена
  • Предпочел бы не использовать GAC
  • Bar.dll находится в c:bar.dll

Итак, все находится в одном локальном каталоге, ссылаются на правильные библиотеки dll (через свойства проекта, и я использовал Reflector, чтобы убедиться, что версии сборки верны). Если я установлю bar.dll для GAC все работает, как ожидалось.

Я думаю, это как-то связано со сборкой.Вызов LoadFile и переход ко второй библиотеке DLL, но я не уверен.

Спасибо за ваше время и вклад.

Ответ №1:

Сборка.LoadFile() следует использовать только в особых обстоятельствах. Сборка не имеет контекста загрузки, вот почему bar.не удается найти dll. Единственный реальный вариант использования — tooling, программы, которые сбрасывают метаданные сборки.

Используйте Load или LoadFrom(). Устранение проблем с fuslogvw.exe

Комментарии:

1. Большое спасибо, Ханс! Я попробовал оба метода, и каждый из них заработал.