вопрос по поводу выгрузки домена
От: Аноним  
Дата: 20.09.06 17:58
Оценка:
Приветствую!
Проблема в следующем
Сборка компилируется программой в dll из нескольких файлов
Загружается в отдельный домен
Вызывается метод Start у сборки
После этого загруженная сборка самостоятельно работает

Необходимо реализовать перезагрузку сборки соответственно с перекомпиляцией (например исходный код сборки был изменен)

Посоветуйте в каком направлении копать плз.
Еще необходимо перед выходом из программы убрать за собой скомпилированные dll

В общем не важно каким способом, но мне необходимо научиться пришибать сборки в домене или домен вместе со сборкой
и освобождать dllки
Re: вопрос по поводу выгрузки домена
От: Аноним  
Дата: 21.09.06 04:33
Оценка:
Здравствуйте, Аноним, Вы писали:

А>В общем не важно каким способом, но мне необходимо научиться пришибать сборки в домене или домен вместе со сборкой

А>и освобождать dllки

AppDomain.Unload (...) не спасёт отца?
Re[2]: вопрос по поводу выгрузки домена
От: Аноним  
Дата: 21.09.06 05:21
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Аноним, Вы писали:


А>>В общем не важно каким способом, но мне необходимо научиться пришибать сборки в домене или домен вместе со сборкой

А>>и освобождать dllки

А>AppDomain.Unload (...) не спасёт отца?


Да, спасает, после этого я могу создать домен и загрузить свежескомпилированную сборку

но после AppDomain.Unload dllка не освобождается, а по сему ни перезаписать ни удалить я ее не могу
а меня как раз и волнует вопрос удаления сейчас
инече скомпилированные сборки копятся в каталоге программы
а вообще был бы пресного благодарен не только за конкретный совет по решению вопроса но и за ссылку на доки по этой теме

и еще вопрос попутный, можно ли загрузить в домен сборку откомпилированную в памяти?

сейчас я делаю так (может вообще надо как-то по другому?):

***
AppDomainSetup domaininfo = new AppDomainSetup();
domaininfo.ApplicationBase = AppPath;
Evidence adevidence = AppDomain.CurrentDomain.Evidence;
ScriptsDomain = AppDomain.CreateDomain("ScriptsDomain", adevidence, domaininfo);
CodeDomProvider provider = GetCurrentProvider(Lng);
string DLLPath = CompileScriptsToDLL(false, path, name, Lng, provider);
if (DLLPath != "")
{
byte[] rawAssembly = loadFile(DLLPath);
/*string pdbpath = DLLPath.Replace(".dll", ".pdb");
byte[] rawSymbolStore = loadFile(pdbpath);*/
Assembly assembly = ScriptsDomain.Load(rawAssembly);
if (assembly != null)
{
ну и тут собственно вызов метода Start у сборки с передаваемой ему ссылкой на объект находящийся в CurrentDomain
}
}
***

вообще я очевидно непонимаю некоторых ключевых моментов
почему при Assembly assembly = ScriptsDomain.Load(rawAssembly); (по идее передается массив байт а не ссылка на файл)
все же необходимо налисие самой dll в AppPath
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.