AppDomain.Unload(AppDomain) Methode

Definitie

Let op

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

Hiermee wordt het opgegeven toepassingsdomein uitgeladen.

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)

Parameters

domain
AppDomain

Een toepassingsdomein dat moet worden uitgeladen.

Kenmerken

Uitzonderingen

domain is null.

.NET Core en .NET 5+ alleen: in alle gevallen.

– of –

domain kan niet worden uitgepakt.

Er is een fout opgetreden tijdens het uitladen.

Voorbeelden

In het volgende codevoorbeeld ziet u hoe u een toepassingsdomein kunt uitladen.

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

Opmerkingen

Er is een thread die is toegewezen aan het lossen van toepassingsdomeinen. Dit verbetert de betrouwbaarheid, met name wanneer .NET Framework wordt gehost. Wanneer een thread aanroept Unload, wordt het doeldomein gemarkeerd voor het lossen. De toegewezen thread probeert het domein te verwijderen en alle threads in het domein worden afgebroken. Als een thread bijvoorbeeld niet wordt afgebroken omdat er niet-beheerde code wordt uitgevoerd of omdat er een blok wordt uitgevoerd, wordt er na een finally bepaalde periode een CannotUnloadAppDomainException thread gegenereerd die oorspronkelijk is aangeroepen Unload. Als de thread die uiteindelijk niet kan worden afgebroken, wordt het doeldomein niet verwijderd. domain Het is dus niet gegarandeerd dat het laden ongedaan wordt gemaakt, omdat het mogelijk niet mogelijk is om de uitvoering van threads te beëindigen.

Note

In sommige gevallen veroorzaakt het aanroepen Unload een onmiddellijke CannotUnloadAppDomainExceptionaanroep, bijvoorbeeld als deze wordt aangeroepen in een finalizer.

De threads worden domain beëindigd met behulp van de Abort methode, die een ThreadAbortException in de thread genereert. Hoewel de thread onmiddellijk moet worden beëindigd, kan deze worden uitgevoerd voor een onvoorspelbare hoeveelheid tijd in een finally component.

Van toepassing op

Zie ook