Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Освобождение захваченных процессом внешних сборок.


Автор: RobbieV 25.7.2006, 21:32
Код

Assembly somedll = Assembly.LoadFile(Directory.GetCurrentDirectory() + “somedll.dll”);


Далее создаем объекты некоторых типов из сборки somedll.dll.
Далее эти объекты покидают память. А сборка somedll.dll остается захваченной приложением. Каким образом ее можно освободить без перезапуска приложения?
 

Автор: arilou 25.7.2006, 22:41
RobbieV, грузить их в другой апдомен (AppDomain), и выгружать его, когда придет время. 

Автор: RobbieV 25.7.2006, 23:13
Спасибо. 

Автор: Prehistorik 26.7.2006, 09:33
arilou, Простите меня, дурака, великодушно... А это как? 

Автор: mr.DUDA 26.7.2006, 10:37
Prehistorik, пожалуйста:

Код
using System;
using System.Reflection;
using System.IO;

class Program
{
    static void Main()
    {
        // создаём класс-worker, выполняющий метод в отдельном домене
        AnotherDomainAssemblyLoader loader = new AnotherDomainAssemblyLoader(@"c:\reflector.exe");

        // создаём домен, вызываем метод, выгружаем домен
        AppDomain domain = AppDomain.CreateDomain("bla-bla-bla");
        domain.DoCallBack(loader.LoadAssemblyAndDisplayInfo);
        AppDomain.Unload(domain);

        // всё, сборку можно даже удалить, она не заблокирована
        File.Delete(@"c:\reflector.exe");
    }
}

// класс-worker для работы в отдельном домене

[Serializable]
public class AnotherDomainAssemblyLoader
{
    public string AssemblyPath;

    public AnotherDomainAssemblyLoader(string assemblyPath)
    {
        this.AssemblyPath = assemblyPath;
    }

    public void LoadAssemblyAndDisplayInfo()
    {
        // грузим сборку в отдельном домене и выводим информацию в консоль
        Assembly assm = Assembly.LoadFile(this.AssemblyPath);
        Console.WriteLine(assm.GetName().Version); // версия assembly
        Console.WriteLine(assm.CodeBase); // полный путь к assembly
    }
}
 

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