Как выгрузить сборку?
От: Аноним  
Дата: 07.03.06 22:31
Оценка:
Вот я чет не пойму.
Из проги написанной на managed С++ загружаю сборку (созданную на C# в MSVC ввиде *.dll),

Assembly * assembly = AppDomain::CurrentDomain->Load( name );

создаю instance класса который есть в этой сборке (все че мне нужно работает в конструкторе)
Object * m_curScript = assembly->CreateInstance( type_name );


потом вижу что класс работает не так как мне нужно и я хочу выгрузить эту сборку, исправить, пересобрать, и заново загрузить,
не выходя из основной программы (которя на managed С++). Но как это сделать я так и не нашел, даже когда вызываю
AppDomain::CurrentDomain->UnLoad();

все равно сборка удерживается и я не могу ее перезаписать.

Неужели нет способа также легко работать с NET сборками как с обычными Dll (типа загрузил, выполнил что надо, и выгрузил)?
Заранее спасибо.
Re: Как выгрузить сборку?
От: Mab Россия http://shade.msu.ru/~mab
Дата: 07.03.06 22:33
Оценка:
http://www.rsdn.ru/search/?q=%EA%E0%EA+%E2%FB%E3%F0%F3%E7%E8%F2%FC+%F1%E1%EE%F0%EA%F3&mode=rank&group=N
Re[2]: Как выгрузить сборку?
От: Harley_D Россия www.digicreatures.com
Дата: 07.03.06 22:50
Оценка:
"Mab" <9336@users.rsdn.ru> wrote in message news:1758518@news.rsdn.ru...
> http://www.rsdn.ru/search/?q=%EA%E0%EA+%E2%FB%E3%F0%F3%E7%E8%F2%FC+%F1%E1%EE%F0%EA%F3&amp;mode=rank&amp;group=N

На самом деле можно. Но сложно
Для этого надо загружать сборку в отдельный appdomain и вот его-то и
выгружать.
Если необходимо выгрузить сборку из текущего запущенного домена приложения —
это невозможно, менеджить можно созданные программно домены .
--
Best regards, Harley
Posted via RSDN NNTP Server 2.0
Best Regards,
Harley
Re: Как выгрузить сборку?
От: Harley_D Россия www.digicreatures.com
Дата: 07.03.06 22:53
Оценка:
" Аноним " <0@users.rsdn.ru> wrote in message news:1758516@news.rsdn.ru...
> Вот я чет не пойму.
> Из проги написанной на managed С++ загружаю сборку (созданную на C# в MSVC
> ввиде *.dll),
>
>
> Assembly * assembly = AppDomain::CurrentDomain->Load( name );
>

> создаю instance класса который есть в этой сборке (все че мне нужно
> работает в конструкторе)
>
> Object * m_curScript = assembly->CreateInstance( type_name );
>

>
> потом вижу что класс работает не так как мне нужно и я хочу выгрузить эту
> сборку, исправить, пересобрать, и заново загрузить,
> не выходя из основной программы (которя на managed С++). Но как это
> сделать я так и не нашел, даже когда вызываю
>
> AppDomain::CurrentDomain->UnLoad();
>

> все равно сборка удерживается и я не могу ее перезаписать.
>
> Неужели нет способа также легко работать с NET сборками как с обычными Dll
> (типа загрузил, выполнил что надо, и выгрузил)?


Сорри не заметил изначального поста.
Можно посоветовать загрудать сборку по-другому, чтобы не лочился файл.
можно ее прочитать в byte[] и загрузить из byte[].
Но — если сборка использует свойство Assembly.Location — то могут быть
проблемы, т.к для сборок загруженных из byte[] это свойство будет null.

--
Best regards, Harley
Posted via RSDN NNTP Server 2.0
Best Regards,
Harley
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.