AppDomain.Unload(AppDomain) Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Achtung
Creating and unloading AppDomains is not supported and throws an exception.
Hebt das Entladen der angegebenen Anwendungsdomäne auf.
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);
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}")>]
static member Unload : AppDomain -> unit
static member Unload : AppDomain -> unit
Public Shared Sub Unload (domain As AppDomain)
Parameter
- domain
- AppDomain
Eine Anwendungsdomäne zum Entladen.
- Attribute
Ausnahmen
domain ist null.
Nur .NET Core und .NET 5+ : In allen Fällen.
-oder-
domain konnte nicht entladen werden.
Fehler beim Entladen.
Beispiele
Das folgende Codebeispiel zeigt, wie Sie eine Anwendungsdomäne entladen.
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
Hinweise
Es gibt einen Thread zum Entladen von Anwendungsdomänen. Dies verbessert die Zuverlässigkeit, insbesondere wenn .NET Framework gehostet wird. Wenn ein Thread aufruft Unload, wird die Zieldomäne zum Entladen markiert. Der dedizierte Thread versucht, die Domäne zu entladen, und alle Threads in der Domäne werden abgebrochen. Wenn ein Thread nicht abgebrochen wird, z. B. weil er nicht verwalteten Code ausführt oder weil er einen finally Block ausführt, wird ein CannotUnloadAppDomainException Thread nach einem bestimmten Zeitraum in dem thread ausgelöst, der ursprünglich aufgerufen wurde Unload. Wenn der Thread, der nicht abgebrochen werden konnte, schließlich beendet wird, wird die Zieldomäne nicht entladen. Daher ist nicht garantiert, domain dass das Entladen aufgehoben wird, da es möglicherweise nicht möglich ist, die Ausführung von Threads zu beenden.
Note
In einigen Fällen führt der Aufruf Unload zu einem sofortigen CannotUnloadAppDomainExceptionAufruf, z. B. wenn er in einem Finalizer aufgerufen wird.
Die Threads in domain werden mit der Abort Methode beendet, die einen ThreadAbortException in den Thread auslöst. Obwohl der Thread prompt beendet werden soll, kann er die Ausführung für eine unvorhersehbare Zeitspanne in einer finally Klausel fortsetzen.