Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Динамическая загрузка из управляемой DLL, Загрузка управляемой DLL во время работы 
:(
    Опции темы
constant
Дата 15.10.2015, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 22.7.2011

Репутация: нет
Всего: нет



Есть основное приложение, во время  работы которого,  необходимо динамически, по необходимости,  создавать экземпляр класса из управляемой библиотеки 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 - 15.10.2015, 15:03
PM MAIL   Вверх
chupachups
Дата 16.10.2015, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 0
Регистрация: 15.10.2008

Репутация: нет
Всего: 1



Собственно вопрос стоит так: "Что я делаю неправильно?"
Но, чтобы на него ответить, надо знать "А как ты это делаешь?"

Правильно поставленный вопрос содержит 50% ответа !!!

Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL   Вверх
constant
Дата 16.10.2015, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 22.7.2011

Репутация: нет
Всего: нет



Цитата


Собственно вопрос стоит так: "Что я делаю неправильно?"
Но, чтобы на него ответить, надо знать "А как ты это делаешь?"
Правильно поставленный вопрос содержит 50% ответа !!!


Да-уж ! Огромное спасибо.

Джедай верностью принципами обладать должен. И серьезным умом. Ты поймешь. Когда ты тих, светел, спокоен... Джедаю Сила нужна лишь для защиты, не для удара. Сила с тобой да прибудет.
                                                                                                                   Мастер Йода

Если кому то нужно решение а не треп то сюда:
http://www.cyberforum.ru/csharp-net/thread...tml#post8199201

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0677 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.