AppDomain.Unload(AppDomain) 메서드

정의

지정한 애플리케이션 도메인을 언로드합니다.Unloads the specified application domain.

public:
 static void Unload(AppDomain ^ domain);
public static void Unload (AppDomain domain);
static member Unload : AppDomain -> unit
Public Shared Sub Unload (domain As AppDomain)

매개 변수

domain
AppDomain

언로드할 애플리케이션 도메인입니다.An application domain to unload.

예외

domain이(가) null인 경우domain is null.

domain을 언로드할 수 없는 경우domain could not be unloaded.

언로드하는 동안 오류가 발생한 경우An error occurred during the unload process.

예제

다음 코드 예제에는 애플리케이션 도메인을 언로드하는 방법을 보여 줍니다.The following code example shows how to unload an application domain.

using namespace System;
using namespace System::Reflection;
using namespace System::Security::Policy;

//for evidence Object*
int main()
{
   
   //Create evidence for the new appdomain.
   Evidence^ adevidence = AppDomain::CurrentDomain->Evidence;
   
   // Create the new application domain.
   AppDomain^ domain = AppDomain::CreateDomain( "MyDomain", adevidence );
   Console::WriteLine( "Host domain: {0}", AppDomain::CurrentDomain->FriendlyName );
   Console::WriteLine( "child domain: {0}", domain->FriendlyName );
   
   // Unload the application domain.
   AppDomain::Unload( domain );
   try
   {
      Console::WriteLine();
      
      // Note that the following statement creates an exception because the domain no longer exists.
      Console::WriteLine( "child domain: {0}", domain->FriendlyName );
   }
   catch ( AppDomainUnloadedException^ /*e*/ ) 
   {
      Console::WriteLine( "The appdomain MyDomain does not exist." );
   }

}

using System;
using System.Reflection;
using System.Security.Policy;
class ADUnload
{
    public static void Main()
    {

        //Create evidence for the new appdomain.
        Evidence adevidence = AppDomain.CurrentDomain.Evidence;

        // Create the new application domain.
        AppDomain domain = AppDomain.CreateDomain("MyDomain", adevidence);

                Console.WriteLine("Host domain: " + AppDomain.CurrentDomain.FriendlyName);
                Console.WriteLine("child domain: " + domain.FriendlyName);
        // Unload the application domain.
        AppDomain.Unload(domain);

        try
        {
        Console.WriteLine();
        // Note that 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.");
        }
    }
}
Imports System.Reflection
Imports System.Security.Policy

Class ADUnload
   
   Public Shared Sub Main()

      'Create evidence for the new appdomain.
      Dim adevidence As Evidence = AppDomain.CurrentDomain.Evidence

      ' Create the new application domain.
      Dim domain As AppDomain = AppDomain.CreateDomain("MyDomain", adevidence)
      
      Console.WriteLine(("Host domain: " + AppDomain.CurrentDomain.FriendlyName))
      Console.WriteLine(("child domain: " + domain.FriendlyName))
      ' Unload the application domain.
      AppDomain.Unload(domain)
      
      Try
         Console.WriteLine()
         ' Note that 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
End Class

설명

.NET Framework 버전 2.0에에서는 전용 스레드는 애플리케이션 도메인 언로드를 합니다.In the .NET Framework version 2.0 there is a thread dedicated to unloading application domains. 이렇게 하면 특히 .NET Framework 호스트 되는 경우 안정성이 향상 됩니다.This improves reliability, especially when the .NET Framework is hosted. 스레드가를 호출 하면 Unload 대상 도메인은 언로드를 위해 표시 됩니다.When a thread calls Unload, the target domain is marked for unloading. 전용 스레드가 도메인 언로드를 시도 하 고 도메인의 모든 스레드가 중단 됩니다.The dedicated thread attempts to unload the domain, and all threads in the domain are aborted. 예를 들어 비관리 코드를 실행 하 고 있거나 블록을 실행 하 고 있기 때문에 스레드를 중단 하지 않으면 finally CannotUnloadAppDomainException 원래 호출한 스레드에서 a 시간이 throw 됩니다 Unload .If a thread does not abort, for example because it is executing unmanaged code, or because it is executing a finally block, then after a period of time a CannotUnloadAppDomainException is thrown in the thread that originally called Unload. 중단할 수 없는 스레드가 종료 되 면 대상 도메인은 언로드되지 않습니다.If the thread that could not be aborted eventually ends, the target domain is not unloaded. 따라서 .NET Framework 버전 2.0 domain 은 스레드 실행을 종료 하지 못할 수 있으므로 언로드할 수 없습니다.Thus, in the .NET Framework version 2.0 domain is not guaranteed to unload, because it might not be possible to terminate executing threads.

참고

경우에 따라를 호출 하면 Unload CannotUnloadAppDomainException 종료자에서가 호출 되는 경우와 같이 즉시가 발생 합니다.In some cases, calling Unload causes an immediate CannotUnloadAppDomainException, for example if it is called in a finalizer.

에서 스레드는를 domain 사용 하 여 종료 됩니다 Abort .이 메서드는 스레드에서을 throw ThreadAbortException 합니다.The threads in domain are terminated using the Abort method, which throws a ThreadAbortException in the thread. 스레드는 즉시 종료 되어야 하지만, 절에서 예측할 수 없는 시간 동안 실행을 계속할 수 있습니다 finally .Although the thread should terminate promptly, it can continue executing for an unpredictable amount of time in a finally clause.

버전 호환성Version Compatibility

.NET Framework 버전 1.0 및 1.1에서를 호출 하는 스레드가 실행 되 고 있는 경우 Unload domain 다른 스레드가 시작 되어 언로드 작업을 수행 합니다.In the .NET Framework version 1.0 and 1.1 if the thread that calls Unload is running in domain, another thread is started to perform the unload operation. 를 언로드할 수 없으면를 domain CannotUnloadAppDomainException 호출한 원래 스레드가 아니라 해당 스레드에서이 throw 됩니다 Unload .If domain cannot be unloaded, a CannotUnloadAppDomainException is thrown in that thread, not in the original thread that called Unload. 그러나를 호출 하는 스레드가 Unload 외부에서 실행 되는 경우 domain 해당 스레드는 예외를 수신 합니다.However, if the thread that calls Unload is running outside domain, that thread receives the exception.

적용 대상