AppDomain.Unload(AppDomain) メソッド

定義

注意事項

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

指定したアプリケーション ドメインをアンロードします。

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)

パラメーター

domain
AppDomain

アンロードするアプリケーション ドメイン。

属性

例外

domainnullです。

.NET Core および .NET 5 以降のみ:すべての場合。

または

domain をアンロードできませんでした。

アンロード処理中にエラーが発生しました。

次のコード例は、アプリケーション ドメインをアンロードする方法を示しています。

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

注釈

.NET Framework バージョン 2.0 以降では、アプリケーション ドメインのアンロード専用のスレッドがあります。 これにより、特に.NET Frameworkがホストされている場合に、信頼性が向上します。 スレッドが を呼び出 Unloadすと、ターゲット ドメインはアンロード用にマークされます。 専用スレッドがドメインのアンロードを試み、ドメイン内のすべてのスレッドが中止されます。 アンマネージド コードを実行している場合やブロックを実行 finally しているなどの理由でスレッドが中止されない場合は、一定期間 CannotUnloadAppDomainException 後に、 が呼び出 Unloadされたスレッドで がスローされます。 中止できなかったスレッドが最終的に終了した場合、ターゲット ドメインはアンロードされません。 したがって、.NET Frameworkバージョン 2.0 以降では、domain実行中のスレッドを終了できない可能性があるため、アンロードは保証されません。

注意

場合によっては、 を呼び出すと Unload 、ファイナライザーで呼び出された場合など、即時 CannotUnloadAppDomainExceptionの が発生します。

domain スレッドは、 メソッドを Abort 使用して終了され、スレッドで が ThreadAbortException スローされます。 スレッドは直ちに終了する必要がありますが、句で予測できない時間だけ実行を finally 続けることができます。

適用対象

こちらもご覧ください