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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.10.2015, 18:34   #1
constant_ural
Пользователь
 
Регистрация: 25.06.2013
Сообщений: 14
По умолчанию Динамическая загрузка из управляемой DLL - C#

Есть основное приложение, во время работы которого, необходимо динамически, по необходимости, создавать экземпляр класса из управляемой библиотеки DLL, и также, по необходимости уничтожать этот экземпляр и выгружать библиотеку. Когда библиотека выгружена, должна быть возможность вносить в нее изменения, пересобрать ее, и не останавливая приложение, во время его работы повторить все действия указанные выше для измененной библиотеки. Среда Framework 4.0

Привожу упрощенный вариант основной программы и библиотеки
Ниже приведен код DLL

Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization;
namespace MainProject
{ 
    [Serializable]
    public class TypeIWantToLoad : InterfBase
    {    
        public TypeIWantToLoad()
        {
            Console.WriteLine("15:58============");                     
        }
      
        public  void DoIt()
        {
            Console.WriteLine("=========DO it ! 15:58============");            
        }
    }
}
Этот класс выводит на консоль две похожие надписи в конструкторе и в методе класса.
Ниже приведен код основной программы.

Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
namespace MainProject
{
    class Program
    {
        static void Main(string[] args)
        {
            LoadUnload();
            System.Threading.Thread.Sleep(30000);
            LoadUnload();                      
        }
        
        static void LoadUnload()
        {
            var domain = AppDomain.CreateDomain("DomainName");            
            var pathToDll = @"e:\Dropbox\proj\MultyAssembly\DLLProj\DLLProj\bin\Debug\DllProj.dll";                      
            InterfBase inst = (InterfBase)domain.CreateInstanceFromAndUnwrap(pathToDll, "MainProject.TypeIWantToLoad");           
            inst.DoIt();                      
            AppDomain.Unload(domain);                    
        }
    }
     public interface InterfBase
     {
         void DoIt();
     }
}
Здесь загружается библиотека, создается экземпляр класса из библиотеки, выгружается библиотека, потом выдержка по времени 30 сек. Во время этой выдержки, пока библиотека выгружена, я меняю в коде библиотеки в выводе на консоль с время 15:58 на 15:59 и в конструкторе, и в методе DoIt. После окончания выдержки выполняется повторная загрузка уже измененной библиотеки и создание из нее нового класса.

Результат вывода на экран:
15:58============
=========DO it ! 15:58============
15:59============
=========DO it ! 15:58============

Т.е. изменения в конструкторе применились, а в методе DoIt нет, выполняется старый код Собственно вопрос и состоит в том, как сделать так, чтобы изменения в библиотеке при повторной загрузке применялись а не только в конструкторе, но и в методах класса/
constant_ural вне форума Ответить с цитированием
Старый 19.10.2015, 17:24   #2
Скарам
Дружите с Linq ;)
Форумчанин
 
Аватар для Скарам
 
Регистрация: 15.10.2008
Сообщений: 822
По умолчанию

Лучше использовать MEF для загрузки и поиска классов в домене.
Пример работы с MEF с загрузкой и выгрузкой.
Не давай организму поблажки, каждый день тренируй его в шашки..
Скарам вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамическая загрузка dll Dizelektwo Win Api 8 20.06.2012 16:56
Динамическая загрузка статического метода из DLL Granus Общие вопросы C/C++ 6 15.02.2012 15:47
Динамическая загрузка формы из DLL grominfo Помощь студентам 1 15.11.2011 17:10
Посоветуйте с DLL (динамическая загрузка) yasic Общие вопросы Delphi 4 18.01.2011 18:24
Динамическая загрузка DLL ImportDLL Общие вопросы C/C++ 2 12.06.2009 11:33