Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка Windows Forms > Проблема с плагиновой архитектурой приложения


Автор: mlitkin 18.9.2008, 23:29
Возникла проблема при разработке приложения по архитектуре плагинов. Т.е. есть основной exe, к которому в момент запуска динамически из подкаталога (Plugins) подцепляются dll-ки плагинов. И все работает на ура до тех пор, пока плагин состоит только из одной dll. Если же в референсах плагина указать еще какую-либо dll, не указанную в референсах основного приложения, то в момент обращения к классу, объявленному в плагине, возникает ошибка:

"Could not load file or assembly 'EquipmentsDomain, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. Не удается найти указанный файл."

Сборка EquipmentsDomain - это как раз та dll-ка, которая есть в плагине (в референсах), но ее нет в основном приложении. Лежит она в той же папке, где и плагин (Plugins\Имя плагина). Проблема "решается", если поместить эту dll в каталог вместе с exe. Но это же неправильно - весь плагин должен лежать в своем подкаталоге. Указание подкаталога плагинов на закладке Reference paths в настройках основного приложения также ничего не дает.
При этом если поставить точку останова в dll-ке плагина и проверить список загруженных в домен сборок (AppDomain.CurrentDomain.GetAssemblies()), то там EquipmentsDomain присутствует и именно по нужному пути (подкаталог плагина).

Может кто-то подскажет в чем тут проблема?

Автор: PashaPash 19.9.2008, 02:14
mlitkin, как именно загружаешь dll плагина? Assembly.LoadFrom? в тот же домен, или в отдельный? Если в отдельный, попробуй указать PrivateBinPath при создании домена. Если в тот же, прицепись к AppDomain.AssemblyResolve и помогай приложению резолвить сборки, или проверь чтобы все сборки загружались в один контекст.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)