AppDomain.Unload(AppDomain) Método

Definición

Descarga el dominio de aplicación especificado.

public:
 static void Unload(AppDomain ^ domain);
public static void Unload(AppDomain domain);
static member Unload : AppDomain -> unit
Public Shared Sub Unload (domain As AppDomain)

Parámetros

domain
AppDomain

Un dominio de aplicación que se va a descargar.

Excepciones

domain es null.

Solo .NET Core y .NET 5+: en todos los casos.

O bien

domain no se pudo descargar.

Error durante el proceso de descarga.

Ejemplos

En el ejemplo de código siguiente se muestra cómo descargar un dominio de aplicación.

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

Comentarios

Hay un subproceso dedicado a descargar dominios de aplicación. Esto mejora la confiabilidad, especialmente cuando se hospeda .NET Framework. Cuando un subproceso llama a Unload, el dominio de destino se marca para descargarse. El subproceso dedicado intenta descargar el dominio y se anulan todos los subprocesos del dominio. Si un subproceso no anula, por ejemplo, porque ejecuta código no administrado o porque ejecuta un bloque, después de un finally período de tiempo, se produce una CannotUnloadAppDomainException excepción en el subproceso que originalmente llamó a Unload. Si el subproceso que no se pudo anular termina finalmente, el dominio de destino no se descarga. Por lo tanto, domain no se garantiza la descarga, ya que es posible que no sea posible finalizar la ejecución de subprocesos.

Note

En algunos casos, llamar a Unload provoca un inmediato CannotUnloadAppDomainException, por ejemplo, si se llama en un finalizador.

Los subprocesos de domain finalizan mediante el Abort método , que produce un ThreadAbortException elemento en el subproceso. Aunque el subproceso debe finalizar rápidamente, puede continuar ejecutándose durante una cantidad impredecible de tiempo en una finally cláusula .

Se aplica a

Consulte también