Я не уверен, как описать это лучше всего. Но у меня проблема с пониманием процесса загрузки ассемблий.
Мое приложение использует плагины через Reflection. Он работает очень хорошо, и я доволен этим. Теперь я наткнулся на проблему, которая меня смущает, и я думаю, что что-то пропустил:
В одном из моих модулей я ссылаюсь на другой модуль. Во время выполнения загружаются все модули. Существуют модули ClientManager и вызывающий модуль Calculations. ClientManager и Calculations загружены. Расчеты ссылаются на ClientManager. Когда Calculations пытается загрузить класс ClientManager, я получаю исключение File Not Found-exception.
Оба сборок загружаются из потоковых в памяти (через Assembly.Load (байты [])
Когда Расчеты пытается загрузить класс ClientManager это, как она выглядит следующим образом:.Ссылка на загруженную сборку
загружено: mscorlib, Version = 4.0.0.0, культура = нейтральной, PublicKeyToken = b77a5c561934e089
многие другие Агрегаты ...
загружен: ClientManager, Version = 1.0.0.0, культура = нейтральной, PublicKeyToken = нуль
нагруженные: Расчеты, Version = 1,0. 0.0, Культура = нейтральная, PublicKeyToken = null
Название собрания должно быть aded: ClientManager, Version = 1.0.0.0, культура = нейтральной, PublicKeyToken = нуль
Запрашиваемые из: Расчеты, Version = 1.0.0.0, культура = нейтральной, PublicKeyToken = нуль
Таким образом, сборка загружается , но он запрашивается, и запрос не выполняется. Что мне не хватает? Нужно ли загружать сборку дважды?
Я благодарен за любую помощь.
Привет,
Skalli
должен иметь возможность просто загрузить первую сборку и до тех пор, как вторичные Сборки в том же месте они должны загружаться сами по себе. –
Они находятся в разных каталогах. Каждый модуль имеет свой собственный каталог. Меня озадачивает то, что я должен загрузить сборку, даже если она уже загружена в AppDomain. Это не большая проблема, чтобы загрузить сборку снова, но я не понимаю, почему это необходимо в этот момент. – Skalli
Если Plugin1.dll ссылается на PluginHelper1.dll, тогда поместите эти два в тот же каталог, загрузите файл Plugin1.dll, и вам должно быть хорошо идти. –