AppDomain.Unload(AppDomain) Yöntem

Tanım

Dikkat

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

Belirtilen uygulama etki alanını kaldırır.

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)

Parametreler

domain
AppDomain

Kaldırılan bir uygulama etki alanı.

Öznitelikler

Özel durumlar

domain, null değeridir.

Yalnızca .NET Core ve .NET 5+ : Her durumda.

-veya-

domain kaldırılamadı.

Kaldırma işlemi sırasında bir hata oluştu.

Örnekler

Aşağıdaki kod örneğinde uygulama etki alanının nasıl kaldırılmış olduğu gösterilmektedir.

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

Açıklamalar

.NET Framework sürüm 2.0 ve sonraki sürümlerde, uygulama etki alanlarını kaldırmaya ayrılmış bir iş parçacığı vardır. Bu, özellikle .NET Framework barındırıldığında güvenilirliği artırır. bir iş parçacığı çağırdığında Unload, hedef etki alanı yüklenmek üzere işaretlenir. Ayrılmış iş parçacığı etki alanını kaldırmaya çalışır ve etki alanındaki tüm iş parçacıkları durduruldu. Bir iş parçacığı, örneğin yönetilmeyen kodu yürüttüğü veya bir finally blok yürüttüğü için durdurulmazsa, bir süre sonra ilk olarak adlı Unloadiş parçacığında bir CannotUnloadAppDomainException oluşturulur. Durdurulamayan iş parçacığı sonunda sona ererse hedef etki alanı kaldırılmaz. Bu nedenle, .NET Framework sürüm 2.0 ve sonraki sürümlerde, domain yürütme iş parçacıklarını sonlandırmak mümkün olmadığından yüklemenin kaldırılması garanti edilmemektedir.

Not

Bazı durumlarda çağrılması Unload , örneğin sonlandırıcıda çağrılırsa, hemen CannotUnloadAppDomainExceptionbir öğesine neden olur.

içindeki domain iş parçacıkları, iş parçacığına Abort bir ThreadAbortException oluşturan yöntemi kullanılarak sonlandırılır. İş parçacığının hemen sonlandırılması gerekse de, bir finally yan tümcesinde öngörülemeyen bir süre boyunca yürütmeye devam edebilir.

Şunlara uygulanır

Ayrıca bkz.