AppDomain.Unload(AppDomain) Método

Definição

Cuidado

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

Descarrega o domínio de aplicativo especificado.

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)

Parâmetros

domain
AppDomain

Um domínio de aplicativo a ser descarregado.

Atributos

Exceções

domain é null.

Somente .NET Core e .NET 5+: Em todos os casos.

-ou-

Não foi possível descarregar domain.

Ocorreu um erro durante o processo de descarregamento.

Exemplos

O exemplo de código a seguir mostra como descarregar um domínio de aplicativo.

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

Comentários

No .NET Framework versão 2.0 e posterior, há um thread dedicado a descarregar domínios de aplicativo. Isso melhora a confiabilidade, especialmente quando .NET Framework está hospedado. Quando um thread chama Unload, o domínio de destino é marcado para descarregamento. O thread dedicado tenta descarregar o domínio e todos os threads no domínio são anulados. Se um thread não for anulado, por exemplo, porque ele está executando código não gerenciado ou porque está executando um finally bloco, depois de um período de tempo, um CannotUnloadAppDomainException será lançado no thread que originalmente chamou Unload. Se o thread que não pôde ser anulado eventualmente terminar, o domínio de destino não será descarregado. Portanto, no .NET Framework versão 2.0 e posterior, domain não há garantia de descarregamento, pois talvez não seja possível encerrar a execução de threads.

Observação

Em alguns casos, chamar Unload causa um imediato CannotUnloadAppDomainException, por exemplo, se for chamado em um finalizador.

Os threads em domain são encerrados usando o Abort método , que lança um ThreadAbortException no thread. Embora o thread deva ser encerrado imediatamente, ele pode continuar em execução por um período imprevisível de tempo em uma finally cláusula .

Aplica-se a

Confira também