#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. Большое спасибо, Ханс! Я попробовал оба метода, и каждый из них заработал.