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 블록을 실행 하 고 있기 때문에 스레드가 중단 되지 않는 경우 Unload를 호출한 스레드에서 CannotUnloadAppDomainException throw 됩니다.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 메서드를 사용 하 여 종료 됩니다 .이 메서드는 스레드에서 ThreadAbortException을 throw 합니다.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 언로드될 수 없는 경우 Unload를 호출한 원래 스레드가 아니라 해당 스레드에서 CannotUnloadAppDomainException throw 됩니다.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.

보안

SecurityPermission
이 이벤트에 대 한 이벤트 처리기를 추가 합니다.to add an event handler for this event. 연관된 열거형: ControlAppDomainAssociated enumeration: ControlAppDomain. 보안 동작: Demand합니다.Security action: Demand.

적용 대상