Выгрузить .net сборку динамически
От: DowJones  
Дата: 22.08.14 15:08
Оценка:
Добрый день!

Перерыл кучу информации в интернете, но что-то так ничего и не добился.
Создаю новый домен, загружаю в него сборку, потом домен выгружаю, а сборка все равно подцепленной остается...

//описываю  класс чтобы сборка создавалась только в новом домене
public class Proxy : MarshalByRefObject
{
     public Assembly GetAssembly(string assemblyPath)
     {
          try
          {
               return Assembly.LoadFile(assemblyPath);
          }
          catch (Exception)
          {
               return null;
          }
     }
}

//далее в коде
AppDomainSetup ads = new AppDomainSetup();
ads.ApplicationBase = Directory.GetCurrentDirectory();

AppDomain ad = AppDomain.CreateDomain("TestDomain", null, ads);//создаю домен
                
ad.SetShadowCopyFiles();//не знаю, насколько это надо 

Type type1 = typeof(Proxy);

var value = (Proxy)ad.CreateInstanceAndUnwrap(type1.Assembly.FullName, type1.FullName);//создаю экземпляр типа Proxy в новом домене

var ass = value.GetAssembly(cp.OutputAssembly);// загружаю сборку

//операции со сборкой 
//......
//

AppDomain.Unload(ad);
 
ad = null;

GC.Collect(2);();//не знаю, насколько это надо


Заранее спасибо...
Re: Выгрузить .net сборку динамически
От: ZloeBablo Германия  
Дата: 22.08.14 15:27
Оценка: 2 (1)

Type type1 = typeof(Proxy);


Судя по этой строчке у вас proxy сборка подцеплена в references. До тех пор пока приложение основное работает сборка будет занята.
Re[2]: Выгрузить .net сборку динамически
От: DowJones  
Дата: 22.08.14 15:58
Оценка:
Здравствуйте, ZloeBablo, Вы писали:

ZB>

ZB>Type type1 = typeof(Proxy);


ZB>Судя по этой строчке у вас proxy сборка подцеплена в references. До тех пор пока приложение основное работает сборка будет занята.


Не совсем понял, а почему вы сделали такой вывод?
То есть вы предлагаете просто убрать переменную type1 и писать typeof(Proxy) вместо нее?
Re[3]: Выгрузить .net сборку динамически
От: Shmj Ниоткуда  
Дата: 22.08.14 21:35
Оценка: 2 (1)
Здравствуйте, DowJones, Вы писали:

DJ>Не совсем понял, а почему вы сделали такой вывод?

DJ>То есть вы предлагаете просто убрать переменную type1 и писать typeof(Proxy) вместо нее?

Тип Proxy маршалится по ссылке. А вот тип Assembly, который вы получили, уже не обладает таким свойством и при работе с ним загружается в основной домен.
Re: Выгрузить .net сборку динамически
От: TK Лес кывт.рф
Дата: 23.08.14 07:26
Оценка: 4 (2)
Здравствуйте, DowJones, Вы писали:

DJ>Перерыл кучу информации в интернете, но что-то так ничего и не добился.

DJ>Создаю новый домен, загружаю в него сборку, потом домен выгружаю, а сборка все равно подцепленной остается...

Класс Assembly он не MarshalByRef т.е. передача его из одного AppDomain в другой равносильно загрузке сборки в каждый AppDomain
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.