Sdílet prostřednictvím


AppDomain.Unload(AppDomain) Metoda

Definice

Upozornění

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

Uvolní zadanou doménu aplikace.

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)

Parametry

domain
AppDomain

Doména aplikace, která se má uvolnit.

Atributy

Výjimky

domain je null.

Pouze .NET Core a .NET 5+: Ve všech případech.

-nebo-

domain nelze uvolnit.

Během procesu uvolnění došlo k chybě.

Příklady

Následující příklad kódu ukazuje, jak uvolnit doménu aplikace.

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

Poznámky

V rozhraní .NET Framework verze 2.0 a novějších je vlákno vyhrazené pro uvolnění aplikačních domén. To zvyšuje spolehlivost, zejména v případě hostovaného rozhraní .NET Framework. Když vlákno volá Unload, cílová doména je označena pro uvolnění. Vyhrazené vlákno se pokusí uvolnit doménu a všechna vlákna v doméně jsou přerušena. Pokud vlákno nepřesunou, například proto, že spouští nespravovaný kód nebo protože spouští finally blok, pak se po určité době vyvolá ve vlákně, CannotUnloadAppDomainException které původně volal Unload. Pokud vlákno, které nebylo možné přerušit, nakonec skončí, cílová doména není uvolněna. Proto v rozhraní .NET Framework verze 2.0 a novější domain není zaručeno uvolnění, protože nemusí být možné ukončit spouštění vláken.

Poznámka

V některých případech volání Unload způsobí okamžitou CannotUnloadAppDomainException, například pokud je volána v finalizátoru.

Vlákna v domain jsou ukončena pomocí Abort metody, která vyvolá ThreadAbortException ve vlákně . I když by se vlákno mělo okamžitě ukončit, může pokračovat v provádění po nepředvídatelnou dobu v klauzuli finally .

Platí pro

Viz také