AppDomain.Unload(AppDomain) メソッド


指定したアプリケーション ドメインをアンロードします。Unloads the specified application domain.

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



アンロードするアプリケーション ドメイン。An application domain to unload.


domainnull です。domain is null.

domain をアンロードできませんでした。domain could not be unloaded.

アンロード処理中にエラーが発生しました。An error occurred during the unload process.

次のコード例は、アプリケーションドメインをアンロードする方法を示しています。The following code example shows how to unload an application 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 );
      // 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.

        // 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.");
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.
         ' 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 では、アプリケーションドメインのアンロード専用のスレッドがあります。In the .NET Framework version 2.0 there is a thread dedicated to unloading application domains. これにより、特に .NET Framework がホストされている場合に、信頼性が向上します。This improves reliability, especially when the .NET Framework is hosted. スレッドが Unloadを呼び出すと、ターゲットドメインにアンロードのマークが付けられます。When a thread calls Unload, the target domain is marked for unloading. 専用スレッドがドメインのアンロードを試行し、ドメイン内のすべてのスレッドが中止されます。The dedicated thread attempts to unload the domain, and all threads in the domain are aborted. アンマネージコードを実行しているなどの理由でスレッドが中止されない場合、またはスレッドが finally ブロックを実行している場合は、Unloadを最初に呼び出したスレッドで CannotUnloadAppDomainException がスローされます。If a thread does not abort, for example because it is executing unmanaged code, or because it is executing a finally block, then after a period of time a CannotUnloadAppDomainException is thrown in the thread that originally called Unload. 中止できなかったスレッドが最終的に終了した場合、ターゲットドメインはアンロードされません。If the thread that could not be aborted eventually ends, the target domain is not unloaded. したがって、.NET Framework バージョン2.0 では、実行中のスレッドを終了できない可能性があるため、domain はアンロードされることは保証されていません。Thus, in the .NET Framework version 2.0 domain is not guaranteed to unload, because it might not be possible to terminate executing threads.


場合によっては、Unload を呼び出すと、ファイナライザーで呼び出された場合など、イミディエイト CannotUnloadAppDomainExceptionが発生します。In some cases, calling Unload causes an immediate CannotUnloadAppDomainException, for example if it is called in a finalizer.

domain 内のスレッドは、Abort メソッドを使用して終了します。これにより、スレッドで ThreadAbortException がスローされます。The threads in domain are terminated using the Abort method, which throws a ThreadAbortException in the thread. スレッドはすぐに終了する必要がありますが、finally 句では、予期しない時間に実行を継続できます。Although the thread should terminate promptly, it can continue executing for an unpredictable amount of time in a finally clause.

バージョンの互換性Version Compatibility

.NET Framework バージョン1.0 および1.1 では、Unload を呼び出すスレッドが domainで実行されている場合、アンロード操作を実行するために別のスレッドが開始されます。In the .NET Framework version 1.0 and 1.1 if the thread that calls Unload is running in domain, another thread is started to perform the unload operation. domain をアンロードできない場合は、Unloadを呼び出した元のスレッドではなく、そのスレッドで CannotUnloadAppDomainException がスローされます。If domain cannot be unloaded, a CannotUnloadAppDomainException is thrown in that thread, not in the original thread that called Unload. ただし、Unload を呼び出すスレッドが domainの外部で実行されている場合、そのスレッドは例外を受け取ります。However, if the thread that calls Unload is running outside domain, that thread receives the exception.


このイベントのイベントハンドラーを追加します。to add an event handler for this event. ControlAppDomain (関連する列挙体)Associated enumeration: ControlAppDomain. セキュリティアクション: DemandSecurity action: Demand.