Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Разработка 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 и помогай приложению резолвить сборки, или проверь чтобы все сборки загружались в один контекст. |