AppDomain.Unload(AppDomain) AppDomain.Unload(AppDomain) AppDomain.Unload(AppDomain) AppDomain.Unload(AppDomain) Method


指定したアプリケーション ドメインをアンロードします。 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)
AppDomain AppDomain AppDomain AppDomain

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


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
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 'Main 
End Class 'ADUnload


.NET Framework version 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を一定期間後のブロックをCannotUnloadAppDomainExceptionと呼ばれる最初のスレッドでスローされるUnloadします。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 version 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 version 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、アンロードすることはできません、CannotUnloadAppDomainExceptionと呼ばれる元のスレッドではなく、そのスレッドでスローされるUnloadします。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. セキュリティ アクション:Demandします。 Security action: Demand.