Поделиться через


Практическое руководство. Выгрузка домена приложения

Обновлен: Ноябрь 2007

После завершения использования домена приложения выгрузите его с помощью метода System.AppDomain.Unload. Метод Unload аккуратно закрывает указанный домен приложения. Во время процесса выгрузки к домену приложения невозможно осуществить доступ из новых потоков, кроме того, при этом происходит освобождение структур данных приложения, связанных с этим доменом.

Сборки, загруженные в домен приложения, удаляются и не могут быть доступны в дальнейшем. Если сборка в домене приложения является нейтральной по отношению к домену, то данные сборки остаются в памяти до тех пор, пока не будет закрыт весь процесс. Не существует способа выгрузки, нейтральной по отношению к домену сборки, кроме закрытия всего процесса. Существуют ситуации, когда запрос на выгрузку домена приложения не работает, что приводит к исключению CannotUnloadAppDomainException.

В следующем примере показаны создание нового домена приложения с именем MyDomain, вывод данных на консоль и затем выгрузка домена приложения. Обратите внимание, что в коде предпринимается попытка вывести на консоль понятное имя выгруженного домена приложения. При этом создается исключение, которое обрабатывается операторами try/catch в конце программы.

Пример

Imports System
Imports System.Reflection
Class AppDomain2
   Public Shared Sub Main()
      Console.WriteLine("Creating new AppDomain.")
      Dim domain As AppDomain = AppDomain.CreateDomain("MyDomain", Nothing)
      
      Console.WriteLine(("Host domain: " + AppDomain.CurrentDomain.FriendlyName))
      Console.WriteLine(("child domain: " + domain.FriendlyName))
      AppDomain.Unload(domain)
      Try
         Console.WriteLine()
         Console.WriteLine(("Host domain: " + AppDomain.CurrentDomain.FriendlyName))
         ' The following statement creates an exception because the domain no longer exists.
         Console.WriteLine(("child domain: " + domain.FriendlyName))
      Catch e As AppDomainUnloadedException
         Console.WriteLine("The appdomain MyDomain does not exist.")
      End Try
   End Sub 'Main
End Class 'AppDomain2
using System;
using System.Reflection;
class AppDomain2
{
public static void Main()
{
 Console.WriteLine("Creating new AppDomain.");
 AppDomain domain = AppDomain.CreateDomain("MyDomain", null);

            Console.WriteLine("Host domain: " + AppDomain.CurrentDomain.FriendlyName);
            Console.WriteLine("child domain: " + domain.FriendlyName);
   AppDomain.Unload(domain);
   try
      {
      Console.WriteLine();
      Console.WriteLine("Host domain: " + AppDomain.CurrentDomain.FriendlyName);
      // The following statement creates an exception because the domain no longer exists.
            Console.WriteLine("child domain: " + domain.FriendlyName);
      }
   catch (AppDomainUnloadedException e)
      {
      Console.WriteLine("The appdomain MyDomain does not exist.");
      }
   }
}

См. также

Задачи

Практическое руководство. Создание домена приложения

Основные понятия

Программирование с использованием доменов приложений

Другие ресурсы

Использование доменов приложений