![]() |
Загрузка и выгрузка сборок - пичальбеда
Задача такая: надо реализовать библиотеку, управляющую загрузкой и выгрузкой сборок. Причем выгрузка должна быть. То есть Assembly->LoadFrom не прокатит. хотя ранее вполне себе хватало такого подхода. Сейчас, по всей видимости, софтина будет расти постоянно - виды учета будут добавляться к ней как плагины. Плюс отчетность. то есть, в перспективе, всяко может быть. Надо обеспечить выгрузку плагинов при необходимости. Вариант с Assembly->LoadFrom эту проблему не решает, т. к. сборки остаются в главном домене. В нете куча примеров решения моего вопроса, но ни один не работает. Попервой пробовал загружать сборку через AppDomain::Load. Все прекрасно грузится, когда сборка лежит рядом с экзешником и грузится в главный домен, а не тот, из которого гружу ее. Когда сборка лежит где-то в другом месте, получаю ошибку, что, мол, не найдена она. Попробовал так:
Код:
this._app.DoCallBack(()=>System.Reflection.Assembly.LoadFrom(strFileName)); System.Runtime.Serialization.SerializationException: Тип "pluginlib.PluginManager+<>c__DisplayClass2" сборки "pluginlib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" не помечен как сериализуемый. в System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate) в pluginlib.PluginManager.LoadFile(String strFileName) в f:\1032\dev\pluginlib\pluginlib\PluginManager.cs:строка 83 pluginlib - это библиотека, которая будет управлять загрузкой и выгрузкой сборок. PluginManager - класс, который это делает. Но в объявлении класса стоит атрибут [Serializable]... Сперва подумал, что проблема в том, что сборка, которую загружаю, не содержит такой пометки класса. Ан нет... :help: Вот полностью код конструктора класса, где создается домен: Код:
public PluginManager(string strPath) Код:
public IEnumerable<IPlugin> LoadFile(string strFileName) Тут тип возврата такой - каждая сборка может иметь несколько классов, реализующих нужный интерфейс. IPlugin - простой инетрфейс с одним методом, который будет реализовывать каждая сборка Затык пока только на загрузке файла сборки :closed-to |
Время: 19:21. |
Время: 19:21.
© OSzone.net 2001-