Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > Перезагрузить dll


Автор: kuller 1.6.2011, 07:05
Здравствуйте!!!

Я в своей программе, в событии формы Load загружал dll-ки (из той папки откуда была запущена программа).

Загружал вот таким образом:
Код

Assembly.Load(путь к dll);


Ну затем анализировал dll-ку, искал нужные мне классы, методы и вызывал их.

Столкнулся с проблемой когда dll-ку вызываю второй и более разы, то получаю совсем неверные результаты, такое ощущение, что где то в памяти значения всех переменных из dll-к сохраняются и при повторном вызове накапливаются.

Ну вот я и подумал, может есть какой то метод, который ПЕРЕЗАГРУЗИТ dll-ку и не будет такого глюка???

Заранее спасибо!!!

Автор: Dennnis 1.6.2011, 07:36
Перезагрузить отдельно загруженную DLL'ку нельзя, только вместе с доменом в который она была загружена.
Цитата(kuller @  1.6.2011,  07:05 Найти цитируемый пост)
Столкнулся с проблемой когда dll-ку вызываю второй и более разы
Что значит "вызвать dll'ку?

Не должно быть такого глюка если ты не используешь внутри каких-нибудь статических полей.

Автор: kuller 1.6.2011, 07:44
Цитата

Что значит "вызвать dll'ку?

Dennnis, ну тут немного не правильно выразился, имелось ввиду повторный вызов метода, который описан в dll-ке.

По поводу статических полей, вроде не использую, ну вот пример метода, который я вызываю:

Код

        public DataTable Method1(List<double[]> A)
        {
            DataTable DT = new DataTable();
            DT.Columns.Add("Сумма", typeof(double));
            for (int i = 0; i < A[0].Length; i++)
            {
                double sum = 0;
                for (int j = 0; j < A.Count; j++)
                {
                    sum += A[j][i];
                }
                DataRow DR = DT.NewRow();
                DR[0] = sum;
                DT.Rows.Add(DR);
            }
            return DT;
        }


Так вот при каждом вызове метода "Method1" сумма накапливается, в чем дело???

Автор: jonie 1.6.2011, 09:14
перезагрузить просто не получится. Надо загружать в отдельный домен, который затем и грохать.
http://blogs.msdn.com/b/ericgu/archive/2007/06/05/app-domains-and-dynamic-loading-the-lost-columns.aspx

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)