AppDomain.Unload Method (AppDomain)


The .NET API Reference documentation has a new home. Visit the .NET API Browser on to see the new experience.

Unloads the specified application domain.

Namespace:   System
Assembly:  mscorlib (in mscorlib.dll)

[SecurityPermissionAttribute(SecurityAction.Demand, ControlAppDomain = true)]
public static void Unload(
	AppDomain domain


Type: System.AppDomain

An application domain to unload.

Exception Condition

domain is null.


domain could not be unloaded.


An error occurred during the unload process.

In the .NET Framework version 2.0 there is a thread dedicated to unloading application domains. This improves reliability, especially when the .NET Framework is hosted. 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. 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. Thus, in the .NET Framework version 2.0 domain is not guaranteed to unload, because it might not be possible to terminate executing threads.


In some cases, calling Unload causes an immediate CannotUnloadAppDomainException, for example if it is called in a finalizer.

The threads in domain are terminated using the Abort method, which throws a ThreadAbortException in the thread. Although the thread should terminate promptly, it can continue executing for an unpredictable amount of time in a finally clause.

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. If domain cannot be unloaded, a CannotUnloadAppDomainException is thrown in that thread, not in the original thread that called Unload. However, if the thread that calls Unload is running outside domain, that thread receives the exception.

The following code example shows how to unload an application domain.

using System;
using System.Reflection;
using System.Security.Policy;  //for evidence object
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.");




to add an event handler for this event. Associated enumeration: SecurityPermissionFlag.ControlAppDomain. Security action: Demand.

.NET Framework
Available since 1.1
Return to top