Freigeben über


AppDomain.Unload(AppDomain) Methode

Definition

Achtung

Creating and unloading AppDomains is not supported and throws an exception.

Entlädt die angegebene Anwendungsdomäne.

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)

Parameter

domain
AppDomain

Eine zu entladende Anwendungsdomäne.

Attribute

Ausnahmen

domain ist null.

Nur .NET Core und .NET 5 und höher: In allen Fällen.

Oder

domain konnte nicht entladen werden.

Während des Entladeprozesses ist ein Fehler aufgetreten.

Beispiele

Im folgenden Codebeispiel wird das Entladen einer Anwendungsdomäne veranschaulicht.

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

In .NET Framework Version 2.0 und höher ist ein Thread zum Entladen von Anwendungsdomänen vorgesehen. 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 nach einer bestimmten Zeit ein im Thread ausgelöst, CannotUnloadAppDomainException der ursprünglich aufgerufen hat Unload. Wenn der Thread, der nicht abgebrochen werden konnte, schließlich beendet wird, wird die Zieldomäne nicht entladen. Daher wird in .NET Framework Version 2.0 und höher nicht garantiert entladen, da es möglicherweise nicht möglich ist, domain ausgeführte Threads zu beenden.

Hinweis

In einigen Fällen verursacht der Aufruf Unload eine sofortige CannotUnloadAppDomainException, z. B. wenn es in einem Finalizer aufgerufen wird.

Die Threads in domain werden mit der Abort -Methode beendet, die eine ThreadAbortException im Thread auslöst. Obwohl der Thread sofort beendet werden sollte, kann er die Ausführung in einer finally -Klausel für einen unvorhersehbaren Zeitraum fortsetzen.

Gilt für:

Weitere Informationen