AppDomain.Unload(AppDomain) 메서드
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
주의
Creating and unloading AppDomains is not supported and throws an exception.
지정한 애플리케이션 도메인을 언로드합니다.
public:
static void Unload(AppDomain ^ domain);
public static void Unload (AppDomain domain);
[System.Obsolete("Creating and unloading AppDomains is not supported and throws an exception.", DiagnosticId="SYSLIB0024", UrlFormat="https://aka.ms/dotnet-warnings/{0}")]
public static void Unload (AppDomain domain);
static member Unload : AppDomain -> unit
[<System.Obsolete("Creating and unloading AppDomains is not supported and throws an exception.", DiagnosticId="SYSLIB0024", UrlFormat="https://aka.ms/dotnet-warnings/{0}")>]
static member Unload : AppDomain -> unit
Public Shared Sub Unload (domain As AppDomain)
매개 변수
- domain
- AppDomain
언로드할 애플리케이션 도메인입니다.
- 특성
예외
domain
이(가) null
인 경우
언로드하는 동안 오류가 발생한 경우
예제
다음 코드 예제에는 애플리케이션 도메인을 언로드하는 방법을 보여 줍니다.
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.");
}
}
}
open System
//Create evidence for the new appdomain.
let adevidence = AppDomain.CurrentDomain.Evidence
// Create the new application domain.
let domain = AppDomain.CreateDomain("MyDomain", adevidence)
printfn $"Host domain: {AppDomain.CurrentDomain.FriendlyName}"
printfn $"child domain: {domain.FriendlyName}"
// Unload the application domain.
AppDomain.Unload domain
try
printfn ""
// Note that the following statement creates an exception because the domain no longer exists.
printfn $"child domain: {domain.FriendlyName}"
with :? AppDomainUnloadedException ->
printfn "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 이상에는 애플리케이션 도메인 언로드 전용 스레드가 있습니다. 이렇게 하면 특히 .NET Framework 호스팅되는 경우 안정성이 향상됩니다. 스레드가 를 호출 Unload하면 대상 도메인이 언로드로 표시됩니다. 전용 스레드가 도메인을 언로드하려고 하면 도메인의 모든 스레드가 중단됩니다. 예를 들어 스레드가 관리되지 않는 코드를 실행 중이거나 블록을 CannotUnloadAppDomainException 실행 finally
중이기 때문에 중단되지 않으면 는 원래 라고 하는 Unload스레드에서 throw됩니다. 중단될 수 없는 스레드가 결국 종료되면 대상 도메인이 언로드되지 않습니다. 따라서 .NET Framework 버전 2.0 이상 domain
에서는 실행 중인 스레드를 종료할 수 없기 때문에 언로드가 보장되지 않습니다.
참고
경우에 따라 를 호출 Unload 하면 종료자에서 호출되는 경우와 같이 즉시 CannotUnloadAppDomainException가 발생합니다.
의 스레드는 스레드에서 domain
을 Abort throw하는 메서드를 ThreadAbortException 사용하여 종료됩니다. 스레드는 즉시 종료되어야 하지만 절에서 finally
예측할 수 없는 시간 동안 계속 실행할 수 있습니다.
적용 대상
추가 정보
.NET