Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.01.2009, 14:29   #1
Hollander
Участник клуба
 
Аватар для Hollander
 
Регистрация: 03.05.2007
Сообщений: 1,189
По умолчанию C# Reflection: разблокировать файл после LoadAssembly

Честно говоря, не знаю баг ли это от Microsoft или это наоборот фича для чего, но проблема такая: После выполнения метода LoadAssembly() библиотека которую мы загрузили блокируется программой до завершения выполнения. А мне нужно удалить эту библиотеку. Кто знает методы как разблокировать её?
Hollander вне форума Ответить с цитированием
Старый 22.01.2009, 18:08   #2
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Assembly.Load ?
Не нашел метода LoadAssembly.

В любом случае, у Рихтера, по-моему:

Цитата:
CLR не поддерживает выгрузку отдельных сборок. Но можно приказать CLR выгрузить AppDomain со всеми сборками, которые в нем находятся.
Причем нельзя выгрузить даже сборку, загруженную ReflectionOnly. Выход - создать отдельный домен и в нем загружать сборку.

http://msdn.microsoft.com/ru-ru/library/ms173101.aspx
alexBlack вне форума Ответить с цитированием
Старый 22.01.2009, 19:38   #3
Hollander
Участник клуба
 
Аватар для Hollander
 
Регистрация: 03.05.2007
Сообщений: 1,189
По умолчанию

Сорри, это я немного запутался(про LoadAssembly). Я уже как и сам нашел решение с использованием доменов. Но возник вопрос как загрузить dll в домен имея только путь к ней?
Hollander вне форума Ответить с цитированием
Старый 22.01.2009, 20:14   #4
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Цитата:
Сообщение от Hollander Посмотреть сообщение
Сорри, это я немного запутался(про LoadAssembly). Я уже как и сам нашел решение с использованием доменов. Но возник вопрос как загрузить dll в домен имея только путь к ней?
А если так ? :

Код:
namespace MyNameSpace
{
    [Serializable]
    public class Example
    {
        static void Main()
        {
            AppDomain ad2 = AppDomain.CreateDomain(
                "AD_2",         
                null,           
                null);          

            Object o = ad2.CreateInstanceAndUnwrap(
                "ConsoleApplication2", // здесь путь и имя сборки (в данном случае грузит сама себя)
                "MyNameSpace.Example");
            Console.WriteLine(o.GetType());

            AppDomain.Unload(ad2);
        }
    }
}

Последний раз редактировалось alexBlack; 22.01.2009 в 21:00.
alexBlack вне форума Ответить с цитированием
Старый 23.01.2009, 16:24   #5
Hollander
Участник клуба
 
Аватар для Hollander
 
Регистрация: 03.05.2007
Сообщений: 1,189
По умолчанию

Спасибо за помощь. (+отзыв). Но я использовал немного другой метод: я создал домен и в нем вызывал функцию, в которой использовал Assembly.Load(). Примерно так:
Код:
domain.SetData("myproperties", props);
domain.DoCallBack(new CrossAppDomainDelegate(MyFunction));
Hollander вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дан файл, содержащий текст на русском языке.Составить в алфавитном порядке список слов в файл. JiLiYa Паскаль, Turbo Pascal, PascalABC.NET 3 26.12.2008 12:05
Как записать файл в файл программы? Хамяг Общие вопросы Delphi 2 02.11.2008 16:01
Каретка после текста Shouldercannon Общие вопросы Delphi 3 20.07.2008 10:37
Програмно разблокировать компьютер Vansteyn Win Api 1 25.06.2007 18:18
Как вытащить данные из Excel в бд dephi, а потом (после работы с данными) сформировать новый файл excel. Геля БД в Delphi 1 10.04.2007 15:11