System._AppDomain Interface

Assembly: Mscorlib.dll
Namespace: System
Summary
Represents an application domain, which is an isolated environment where applications execute.
This class is not CLS Compliant

C# Syntax:
[CLSCompliant(false)]
public interface _AppDomain
Remarks
Application domains, which are represented by AppDomain objects, provide isolation, unloading, and security boundaries for executing managed code.

Multiple application domains can run in a single process; however, there is not a one-to-one correlation between application domains and threads. Several threads can belong to a single application domain, and while a given thread is not confined to a single application domain, at any given time, a thread executes in a single application domain.

Application domains are created using the AppDomain.CreateDomain method. AppDomain instances are used to load and execute assemblies ( Assembly). When a AppDomain is no longer in use, it can be unloaded.

The _AppDomain interface implements a set of events to enable applications to respond when an assembly is loaded, an application domain will be unloaded, or an unhandled exception is thrown.

See also:
System Namespace

System._AppDomain Member List:

Public Properties
BaseDirectory Read-only

Gets the base directory that the assembly resolver used to probe for assemblies.
DynamicDirectory Read-only

Gets the directory that the assembly resolver used to probe for dynamically-created assemblies.
Evidence Read-only

Gets the Evidence associated with this application domain that is used as input to security policy.
FriendlyName Read-only

Gets the friendly name of this application domain.
RelativeSearchPath Read-only

Gets the path relative to the base directory where the assembly resolver should probe for private assemblies.
ShadowCopyFiles Read-only

Gets an indication whether all assemblies loaded in the application domain are shadow copied.
Public Methods
AppendPrivatePath Appends the specified name of the directory to the private path.
ClearPrivatePath Resets the path that specifies the location of private assemblies to the empty string ("").
ClearShadowCopyPath Resets the list of directories containing shadow copied assemblies to the empty string ("").
CreateInstance Overloaded:
CreateInstance(string assemblyName, string typeName)

Creates a new instance of the specified type defined in the specified assembly.
CreateInstance Overloaded:
CreateInstance(string assemblyName, string typeName, object[] activationAttributes)

Creates a new instance of the specified type defined in the specified assembly. A parameter specifies an array of activation attributes.
CreateInstance Overloaded:
CreateInstance(string assemblyName, string typeName, bool ignoreCase, BindingFlags bindingAttr, Binder binder, object[] args, CultureInfo culture, object[] activationAttributes, Evidence securityAttributes)

Creates a new instance of the specified type defined in the specified assembly. Parameters specify a binder, binding flags, constructor arguments, culture-specific information used to interpret arguments, activation attributes, and authorization to create the type.
CreateInstanceFrom Overloaded:
CreateInstanceFrom(string assemblyFile, string typeName)

Creates a new instance of the specified type defined in the specified assembly file.
CreateInstanceFrom Overloaded:
CreateInstanceFrom(string assemblyFile, string typeName, object[] activationAttributes)

Creates a new instance of the specified type defined in the specified assembly file.
CreateInstanceFrom Overloaded:
CreateInstanceFrom(string assemblyFile, string typeName, bool ignoreCase, BindingFlags bindingAttr, Binder binder, object[] args, CultureInfo culture, object[] activationAttributes, Evidence securityAttributes)

Creates a new instance of the specified type defined in the specified assembly file.
DefineDynamicAssembly Overloaded:
DefineDynamicAssembly(AssemblyName name, AssemblyBuilderAccess access)

Defines a dynamic assembly with the specified name and access mode.
DefineDynamicAssembly Overloaded:
DefineDynamicAssembly(AssemblyName name, AssemblyBuilderAccess access, Evidence evidence)

Defines a dynamic assembly using the specified name, access mode, and evidence.
DefineDynamicAssembly Overloaded:
DefineDynamicAssembly(AssemblyName name, AssemblyBuilderAccess access, string dir)

Defines a dynamic assembly using the specified name, access mode, and storage directory.
DefineDynamicAssembly Overloaded:
DefineDynamicAssembly(AssemblyName name, AssemblyBuilderAccess access, string dir, Evidence evidence)

Defines a dynamic assembly using the specified name, access mode, storage directory, and evidence.
DefineDynamicAssembly Overloaded:
DefineDynamicAssembly(AssemblyName name, AssemblyBuilderAccess access, PermissionSet requiredPermissions, PermissionSet optionalPermissions, PermissionSet refusedPermissions)

Defines a dynamic assembly using the specified name, access mode, and permission requests.
DefineDynamicAssembly Overloaded:
DefineDynamicAssembly(AssemblyName name, AssemblyBuilderAccess access, Evidence evidence, PermissionSet requiredPermissions, PermissionSet optionalPermissions, PermissionSet refusedPermissions)

Defines a dynamic assembly using the specified name, access mode, evidence, and permission requests.
DefineDynamicAssembly Overloaded:
DefineDynamicAssembly(AssemblyName name, AssemblyBuilderAccess access, string dir, PermissionSet requiredPermissions, PermissionSet optionalPermissions, PermissionSet refusedPermissions)

Defines a dynamic assembly using the specified name, access mode, storage directory, and permission requests.
DefineDynamicAssembly Overloaded:
DefineDynamicAssembly(AssemblyName name, AssemblyBuilderAccess access, string dir, Evidence evidence, PermissionSet requiredPermissions, PermissionSet optionalPermissions, PermissionSet refusedPermissions)

Defines a dynamic assembly using the specified name, access mode, storage directory, evidence, and permission requests.
DefineDynamicAssembly Overloaded:
DefineDynamicAssembly(AssemblyName name, AssemblyBuilderAccess access, string dir, Evidence evidence, PermissionSet requiredPermissions, PermissionSet optionalPermissions, PermissionSet refusedPermissions, bool isSynchronized)

Defines a dynamic assembly using the specified name, access mode, storage directory, evidence, permission requests, and synchronization option.
DoCallBack Executes the code in another application domain that is identified by the specified delegate.
Equals Returns a value indicating whether this instance is equal to a specified object.
ExecuteAssembly Overloaded:
ExecuteAssembly(string assemblyFile)

Execute the Assembly given its file name. The method specified in the .NET Framework header is called.
ExecuteAssembly Overloaded:
ExecuteAssembly(string assemblyFile, Evidence assemblySecurity)

Execute the Assembly given its file name and supplied evidence.
ExecuteAssembly Overloaded:
ExecuteAssembly(string assemblyFile, Evidence assemblySecurity, string[] args)

Execute the Assembly given its file name and supplied Evidence. Optionally, the Assembly can be loaded into the domain-neutral code area for use by multiple AppDomains.
GetAssemblies Gets the assemblies that have been loaded into this application domain.
GetData Gets the value stored in the current application domain for the specified data name.
GetHashCode Returns the hash code for this instance.
GetLifetimeService Returns a lifetime service object that controls the lifetime policy for an instance that implements this interface.
GetType Gets the type of the current instance.
InitializeLifetimeService Gives the AppDomain an infinite lifetime by preventing a lease from being created.
Load Overloaded:
Load(AssemblyName assemblyRef)

Loads an Assembly given its AssemblyName.
Load Overloaded:
Load(byte[] rawAssembly)

Loads the Assembly with a COFF based image containing an emitted Assembly.
Load Overloaded:
Load(string assemblyString)

Loads an Assembly given its display name.
Load Overloaded:
Load(AssemblyName assemblyRef, Evidence assemblySecurity)

Loads an Assembly given its AssemblyName.
Load Overloaded:
Load(byte[] rawAssembly, byte[] rawSymbolStore)

Loads the Assembly with a COFF based image containing an emitted Assembly. The raw bytes representing the symbols for the Assembly are also loaded.
Load Overloaded:
Load(string assemblyString, Evidence assemblySecurity)

Loads an Assembly given its display name.
Load Overloaded:
Load(byte[] rawAssembly, byte[] rawSymbolStore, Evidence securityEvidence)

Loads the Assembly with a COFF based image containing an emitted Assembly. The raw bytes representing the symbols for the Assembly are also loaded.
SetAppDomainPolicy Establishes the security policy level for this application domain.
SetCachePath Establishes the specified directory path as the location where assemblies are shadow copied.
SetData Assigns the specified value to the specified application domain property.
SetPrincipalPolicy Specifies how principal and identity objects should be attached to a thread if the thread attempts to bind to a principal while executing in this application domain.
SetShadowCopyPath Establishes the specified directory path as the location of assemblies to be shadow copied.
SetThreadPrincipal Set the default principal object to be attached to threads if they attempt to bind to a principal while executing in this application domain.
ToString Obtains the String representation of this instance.
Public Events
AssemblyLoad Occurs when an assembly is loaded.
AssemblyResolve Occurs when the resolution of an assembly fails.
DomainUnload Occurs when an AppDomain is about to be unloaded.
ProcessExit Occurs when a process is about to exit.
ResourceResolve Occurs when the resolution of a resource fails.
TypeResolve Occurs when the resolution of a type fails.
UnhandledException Occurs when an exception is not caught by an event handler.

System._AppDomain Member Details

Property: BaseDirectory (read-only)
Summary
Gets the base directory that the assembly resolver used to probe for assemblies.
This class is not CLS Compliant

C# Syntax:
string BaseDirectory {get;}
Remarks
This property corresponds to the assembly resolver's APPBASE.

Return to top


Property: DynamicDirectory (read-only)
Summary
Gets the directory that the assembly resolver used to probe for dynamically-created assemblies.
This class is not CLS Compliant

C# Syntax:
string DynamicDirectory {get;}
Remarks
Only available once an attempt has been made to load an assembly into this domain.

Return to top


Property: Evidence (read-only)
Summary
Gets the Evidence associated with this application domain that is used as input to security policy.
This class is not CLS Compliant

C# Syntax:
Evidence Evidence {get;}

Return to top


Property: FriendlyName (read-only)
Summary
Gets the friendly name of this application domain.
This class is not CLS Compliant

C# Syntax:
string FriendlyName {get;}
Remarks
The friendly name of the default application domain is the name of the assembly file loaded in the application domain. The friendly name is formed by stripping the directory specification from the assembly's codebase. For example, if an assembly with the file name "c:\MyAppDirectory\MyAssembly.exe" is loaded in the default application domain, the friendly name of that application domain is "MyAssembly.exe" .

Return to top


Property: RelativeSearchPath (read-only)
Summary
Gets the path relative to the base directory where the assembly resolver should probe for private assemblies.
This class is not CLS Compliant

C# Syntax:
string RelativeSearchPath {get;}
Remarks
Private assemblies are deployed in the same directory structure as the application.

Return to top


Property: ShadowCopyFiles (read-only)
Summary
Gets an indication whether all assemblies loaded in the application domain are shadow copied.
This class is not CLS Compliant

C# Syntax:
bool ShadowCopyFiles {get;}
Remarks
For more information, see AppDomainSetup.ShadowCopyFiles.

Return to top


Method: AppendPrivatePath(
   string path
)
Summary
Appends the specified name of the directory to the private path.
This class is not CLS Compliant

C# Syntax:
void AppendPrivatePath(
   string path
);
Parameters:

path

The name of the directory to be appended to the private path.

Remarks
The private path, or relative search path, is the path relative to the base directory where the assembly resolver probes for private assemblies.

Return to top


Method: ClearPrivatePath()
Summary
Resets the path that specifies the location of private assemblies to the empty string ("").
This class is not CLS Compliant

C# Syntax:
void ClearPrivatePath();
Remarks
The private path is a path relative to the base directory that the common language runtime searches to locate private assemblies.

For more information, see AppDomainSetup.PrivateBinPath.

See also:
String.Empty

Return to top


Method: ClearShadowCopyPath()
Summary
Resets the list of directories containing shadow copied assemblies to the empty string ("").
This class is not CLS Compliant

C# Syntax:
void ClearShadowCopyPath();
Remarks
The shadow copy path is a list of directories where shadow copied assemblies are stored.

For more information, see AppDomainSetup.ShadowCopyDirectories.

See also:
String.Empty

Return to top


Overloaded Method: CreateInstance(
   string assemblyName,
   string typeName
)
Summary
Creates a new instance of the specified type defined in the specified assembly.
This class is not CLS Compliant

C# Syntax:
ObjectHandle CreateInstance(
   string assemblyName,
   string typeName
);
Parameters:

assemblyName

The display name of the assembly.

typeName

The fully-qualified name of the requested type.

Return Value:
An object that is a wrapper for the new instance, or null if typeName is not found. The return value needs to be unwrapped to access the real object.
Exceptions
Exception Type Condition
ArgumentNullException assemblyName or typeName is null.
Remarks
This method calls the default constructor for typeName.

See AssemblyName for the format of assemblyName.

Return to top


Overloaded Method: CreateInstance(
   string assemblyName,
   string typeName,
   object[] activationAttributes
)
Summary
Creates a new instance of the specified type defined in the specified assembly. A parameter specifies an array of activation attributes.
This class is not CLS Compliant

C# Syntax:
ObjectHandle CreateInstance(
   string assemblyName,
   string typeName,
   object[] activationAttributes
);
Parameters:

assemblyName

The display name of the assembly.

typeName

The fully-qualified name of the requested type.

activationAttributes

One or more attributes that can participate in activation.

Return Value:
An object that is a wrapper for the new instance, or null if typeName is not found. The return value needs to be unwrapped to access the real object.
Exceptions
Exception Type Condition
ArgumentNullException assemblyName or typeName is null.
Remarks
This method calls the default constructor for typeName.

See AssemblyName for the format of assemblyName.

Return to top


Overloaded Method: CreateInstance(
   string assemblyName,
   string typeName,
   bool ignoreCase,
   BindingFlags bindingAttr,
   Binder binder,
   object[] args,
   CultureInfo culture,
   object[] activationAttributes,
   Evidence securityAttributes
)
Summary
Creates a new instance of the specified type defined in the specified assembly. Parameters specify a binder, binding flags, constructor arguments, culture-specific information used to interpret arguments, activation attributes, and authorization to create the type.
This class is not CLS Compliant

C# Syntax:
ObjectHandle CreateInstance(
   string assemblyName,
   string typeName,
   bool ignoreCase,
   BindingFlags bindingAttr,
   Binder binder,
   object[] args,
   CultureInfo culture,
   object[] activationAttributes,
   Evidence securityAttributes
);
Parameters:

assemblyName

The display name of the assembly.

typeName

The fully-qualified name of the requested type.

ignoreCase

A Boolean value specifying whether to perform a case-sensitive search or not.

bindingAttr

A combination of zero or more bit flags that affect the search for the typeName constructor. If bindingAttr is zero, a case-sensitive search for public constructors is conducted.

binder

An object that enables the binding, coercion of argument types, invocation of members and retrieval of MemberInfo objects using reflection. If binder is null, the default binder is used.

args

The arguments to be passed to the constructor. This array of arguments must match in number, order, and type the parameters of the constructor to be invoked. If the default constructor is desired, args must be an empty array or null.

culture

Culture-specific information that governs the coercion of args to the formal types declared for the typeName constructor. If culture is null, the CultureInfo for the current thread is used.

activationAttributes

One or more attributes that can participate in activation.

securityAttributes

Information used to authorize creation of typeName.

Return Value:
An object that is a wrapper for the new instance, or null if typeName is not found. The return value needs to be unwrapped to access the real object.
Exceptions
Exception Type Condition
ArgumentNullException assemblyName or typeName is null.
Remarks
This method calls the default constructor for typeName.

See AssemblyName for the format of assemblyName.

Return to top


Overloaded Method: CreateInstanceFrom(
   string assemblyFile,
   string typeName
)
Summary
Creates a new instance of the specified type defined in the specified assembly file.
This class is not CLS Compliant

C# Syntax:
ObjectHandle CreateInstanceFrom(
   string assemblyFile,
   string typeName
);
Parameters:

assemblyFile

The name of a file that contains an assembly that defines the requested type.

typeName

The fully-qualified name of the requested type.

Return Value:
An object that is a wrapper for the new instance, or null if typeName is not found. The return value needs to be unwrapped to access the real object.
Exceptions
Exception Type Condition
ArgumentNullException assemblyFile is null.

-or-

typeName is null.

Remarks
The default constructor for typeName is invoked.

For more information, see the Activator.CreateInstanceFrom method.

Return to top


Overloaded Method: CreateInstanceFrom(
   string assemblyFile,
   string typeName,
   object[] activationAttributes
)
Summary
Creates a new instance of the specified type defined in the specified assembly file.
This class is not CLS Compliant

C# Syntax:
ObjectHandle CreateInstanceFrom(
   string assemblyFile,
   string typeName,
   object[] activationAttributes
);
Parameters:

assemblyFile

The name of a file that contains an assembly that defines the requested type.

typeName

The fully-qualified name of the requested type.

activationAttributes

One or more attributes that can participate in activation.

Return Value:
An object that is a wrapper for the new instance, or null if typeName is not found. The return value needs to be unwrapped to access the real object.
Exceptions
Exception Type Condition
ArgumentNullException assemblyFile is null.

-or-

typeName is null.

Remarks
The default constructor for typeName is invoked.

For more information, see the Activator.CreateInstanceFrom method.

Return to top


Overloaded Method: CreateInstanceFrom(
   string assemblyFile,
   string typeName,
   bool ignoreCase,
   BindingFlags bindingAttr,
   Binder binder,
   object[] args,
   CultureInfo culture,
   object[] activationAttributes,
   Evidence securityAttributes
)
Summary
Creates a new instance of the specified type defined in the specified assembly file.
This class is not CLS Compliant

C# Syntax:
ObjectHandle CreateInstanceFrom(
   string assemblyFile,
   string typeName,
   bool ignoreCase,
   BindingFlags bindingAttr,
   Binder binder,
   object[] args,
   CultureInfo culture,
   object[] activationAttributes,
   Evidence securityAttributes
);
Parameters:

assemblyFile

The name of a file that contains an assembly that defines the requested type.

typeName

The fully-qualified name of the requested type.

ignoreCase

A Boolean value specifying whether to perform a case-sensitive search or not.

bindingAttr

A combination of zero or more bit flags that affect the search for the typeName constructor. If bindingAttr is zero, a case-sensitive search for public constructors is conducted.

binder

An object that enables the binding, coercion of argument types, invocation of members and retrieval of MemberInfo objects through reflection. If binder is null, the default binder is used.

args

The arguments to be passed to the constructor. This array of arguments must match in number, order, and type the parameters of the constructor to be invoked. If the default constructor is desired, args must be an empty array or null.

culture

Culture-specific information that governs the coercion of args to the formal types declared for the typeName constructor. If culture is null, the CultureInfo for the current thread is used.

activationAttributes

One or more attributes that can participate in activation.

securityAttributes

Information used to authorize creation of typeName.

Return Value:
An object that is a wrapper for the new instance, or null if typeName is not found. The return value needs to be unwrapped to access the real object.
Exceptions
Exception Type Condition
ArgumentNullException assemblyFile is null.

-or-

typeName is null.

Remarks
For more information, see the Activator.CreateInstanceFrom method.

Return to top


Overloaded Method: DefineDynamicAssembly(
   AssemblyName name,
   AssemblyBuilderAccess access
)
Summary
Defines a dynamic assembly with the specified name and access mode.
This class is not CLS Compliant

C# Syntax:
AssemblyBuilder DefineDynamicAssembly(
   AssemblyName name,
   AssemblyBuilderAccess access
);
Parameters:

name

The unique identity of the dynamic assembly.

access

The access mode for the dynamic assembly.

Return Value:
Represents the dynamic assembly created.
Exceptions
Exception Type Condition
ArgumentNullException name is null.
ArgumentException The Name property of name is null.

-or-

The Name property of name begins with white space, or contains a forward or backward slash.

Remarks
This method should only be used to define a dynamic assembly in the current application domain. For more information, see the Remarks section of the topic.

The name parameter indirectly specifies a Version (as an OperatingSystem.#ctor constructor parameter). However, this method only persists the major and minor version numbers, not the build and revision numbers. For example, if the Assembly.LoadFrom method is used to indirectly recover the Version for this assembly, only that object's major and minor version numbers will be as originally specified.

Example
The following sample demonstrates the AppDomain.DefineDynamicAssembly method and AppDomain.AssemblyResolve event.
using System;
using System.Reflection;
using System.Reflection.Emit;

class Test {
   public static void Main() {
      AppDomain currentDomain = AppDomain.CurrentDomain;

      InstantiateMyDynamicType(currentDomain);   // Failed!
      
      currentDomain.AssemblyResolve += new ResolveEventHandler(MyResolveEventHandler);
      
      InstantiateMyDynamicType(currentDomain);   // OK!
   }

   static void InstantiateMyDynamicType(AppDomain domain) {
      try {
         domain.CreateInstance("MyDynamicAssembly", "MyDynamicType");
      } catch (Exception e) {
         Console.WriteLine(e.Message);
      }
   }   

   static Assembly MyResolveEventHandler(object sender, ResolveEventArgs args) {
      return DefineDynamicAssembly((AppDomain) sender);
   }
   
   static Assembly DefineDynamicAssembly(AppDomain domain) {
      // Build a dynamic assembly using Reflection Emit API.
   
      AssemblyName assemblyName = new AssemblyName();
      assemblyName.Name = "MyDynamicAssembly";

      AssemblyBuilder assemblyBuilder = domain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run);
      ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule("MyDynamicModule");
      TypeBuilder typeBuilder = moduleBuilder.DefineType("MyDynamicType", TypeAttributes.Public);
      ConstructorBuilder constructorBuilder = typeBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, null);
      ILGenerator ilGenerator = constructorBuilder.GetILGenerator();
      
      ilGenerator.EmitWriteLine("MyDynamicType instantiated!");
      ilGenerator.Emit(OpCodes.Ret);

      typeBuilder.CreateType();

      return assemblyBuilder;
   }
}

    

Return to top


Overloaded Method: DefineDynamicAssembly(
   AssemblyName name,
   AssemblyBuilderAccess access,
   Evidence evidence
)
Summary
Defines a dynamic assembly using the specified name, access mode, and evidence.
This class is not CLS Compliant

C# Syntax:
AssemblyBuilder DefineDynamicAssembly(
   AssemblyName name,
   AssemblyBuilderAccess access,
   Evidence evidence
);
Parameters:

name

The unique identity of the dynamic assembly.

access

The mode in which the dynamic assembly will be accessed.

evidence

The evidence supplied for the dynamic assembly.

Return Value:
Represents the dynamic assembly created.
Exceptions
Exception Type Condition
ArgumentNullException name is null.
ArgumentException The Name property of name is null.

-or-

The Name property of name begins with white space, or contains a forward or backward slash.

Remarks
Only fully trusted callers can supply their evidence when defining a dynamic Assembly. The runtime will map the Evidence through the security policy to determine the granted permissions. Partially trusted callers must supply a null evidence. If evidence is null, the runtime copies the permission sets, that is, the current grant and deny sets, from the caller's Assembly to the dynamic Assembly being defined and marks policy as resolved.

If the dynamic Assembly is saved to disk, subsequent loads will get grants based on policies associated with the location where the Assembly was saved.

This method should only be used to define a dynamic assembly in the current application domain. For more information, see the Remarks section of the topic.

The name parameter indirectly specifies a Version (as an OperatingSystem.#ctor constructor parameter). However, this method only persists the major and minor version numbers, not the build and revision numbers. For example, if the Assembly.LoadFrom method is used to indirectly recover the Version for this assembly, only that object's major and minor version numbers will be as originally specified.

Example
The following sample demonstrates the AppDomain.DefineDynamicAssembly method and AppDomain.AssemblyResolve event.
using System;
using System.Reflection;
using System.Reflection.Emit;

class Test {
   public static void Main() {
      AppDomain currentDomain = AppDomain.CurrentDomain;

      InstantiateMyDynamicType(currentDomain);   // Failed!
      
      currentDomain.AssemblyResolve += new ResolveEventHandler(MyResolveEventHandler);
      
      InstantiateMyDynamicType(currentDomain);   // OK!
   }

   static void InstantiateMyDynamicType(AppDomain domain) {
      try {
         domain.CreateInstance("MyDynamicAssembly", "MyDynamicType");
      } catch (Exception e) {
         Console.WriteLine(e.Message);
      }
   }   

   static Assembly MyResolveEventHandler(object sender, ResolveEventArgs args) {
      return DefineDynamicAssembly((AppDomain) sender);
   }
   
   static Assembly DefineDynamicAssembly(AppDomain domain) {
      // Build a dynamic assembly using Reflection Emit API.
   
      AssemblyName assemblyName = new AssemblyName();
      assemblyName.Name = "MyDynamicAssembly";

      AssemblyBuilder assemblyBuilder = domain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run);
      ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule("MyDynamicModule");
      TypeBuilder typeBuilder = moduleBuilder.DefineType("MyDynamicType", TypeAttributes.Public);
      ConstructorBuilder constructorBuilder = typeBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, null);
      ILGenerator ilGenerator = constructorBuilder.GetILGenerator();
      
      ilGenerator.EmitWriteLine("MyDynamicType instantiated!");
      ilGenerator.Emit(OpCodes.Ret);

      typeBuilder.CreateType();

      return assemblyBuilder;
   }
}

    

Return to top


Overloaded Method: DefineDynamicAssembly(
   AssemblyName name,
   AssemblyBuilderAccess access,
   string dir
)
Summary
Defines a dynamic assembly using the specified name, access mode, and storage directory.
This class is not CLS Compliant

C# Syntax:
AssemblyBuilder DefineDynamicAssembly(
   AssemblyName name,
   AssemblyBuilderAccess access,
   string dir
);
Parameters:

name

The unique identity of the dynamic assembly.

access

The mode in which the dynamic assembly will be accessed.

dir

The name of the directory where the assembly will be saved. If dir is null, the directory defaults to the current directory.

Return Value:
Represents the dynamic assembly created.
Exceptions
Exception Type Condition
ArgumentNullException name is null.
ArgumentException The Name property of name is null.

-or-

The Name property of name begins with white space, or contains a forward or backward slash.

Remarks
This method should only be used to define a dynamic assembly in the current application domain. For more information, see the Remarks section of the topic.

The name parameter indirectly specifies a Version (as an OperatingSystem.#ctor constructor parameter). However, this method only persists the major and minor version numbers, not the build and revision numbers. For example, if the Assembly.LoadFrom method is used to indirectly recover the Version for this assembly, only that object's major and minor version numbers will be as originally specified.

Example
The following sample demonstrates the AppDomain.DefineDynamicAssembly method and AppDomain.AssemblyResolve event.
using System;
using System.Reflection;
using System.Reflection.Emit;

class Test {
   public static void Main() {
      AppDomain currentDomain = AppDomain.CurrentDomain;

      InstantiateMyDynamicType(currentDomain);   // Failed!
      
      currentDomain.AssemblyResolve += new ResolveEventHandler(MyResolveEventHandler);
      
      InstantiateMyDynamicType(currentDomain);   // OK!
   }

   static void InstantiateMyDynamicType(AppDomain domain) {
      try {
         domain.CreateInstance("MyDynamicAssembly", "MyDynamicType");
      } catch (Exception e) {
         Console.WriteLine(e.Message);
      }
   }   

   static Assembly MyResolveEventHandler(object sender, ResolveEventArgs args) {
      return DefineDynamicAssembly((AppDomain) sender);
   }
   
   static Assembly DefineDynamicAssembly(AppDomain domain) {
      // Build a dynamic assembly using Reflection Emit API.
   
      AssemblyName assemblyName = new AssemblyName();
      assemblyName.Name = "MyDynamicAssembly";

      AssemblyBuilder assemblyBuilder = domain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run);
      ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule("MyDynamicModule");
      TypeBuilder typeBuilder = moduleBuilder.DefineType("MyDynamicType", TypeAttributes.Public);
      ConstructorBuilder constructorBuilder = typeBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, null);
      ILGenerator ilGenerator = constructorBuilder.GetILGenerator();
      
      ilGenerator.EmitWriteLine("MyDynamicType instantiated!");
      ilGenerator.Emit(OpCodes.Ret);

      typeBuilder.CreateType();

      return assemblyBuilder;
   }
}

    

Return to top


Overloaded Method: DefineDynamicAssembly(
   AssemblyName name,
   AssemblyBuilderAccess access,
   string dir,
   Evidence evidence
)
Summary
Defines a dynamic assembly using the specified name, access mode, storage directory, and evidence.
This class is not CLS Compliant

C# Syntax:
AssemblyBuilder DefineDynamicAssembly(
   AssemblyName name,
   AssemblyBuilderAccess access,
   string dir,
   Evidence evidence
);
Parameters:

name

The unique identity of the dynamic assembly.

access

The mode in which the dynamic assembly will be accessed.

dir

The name of the directory where the assembly will be saved. If dir is null, the directory defaults to the current directory.

evidence

The evidence supplied for the dynamic assembly.

Return Value:
Represents the dynamic assembly created.
Exceptions
Exception Type Condition
ArgumentNullException name is null.
ArgumentException The Name property of name is null.

-or-

The Name property of name begins with white space, or contains a forward or backward slash.

Remarks
Only fully trusted callers can supply their evidence when defining a dynamic Assembly. The runtime will map the Evidence through the security policy to determine the granted permissions. Partially trusted callers must supply a null evidence. If evidence is null, the runtime copies the permission sets, that is, the current grant and deny sets, from the caller's Assembly to the dynamic Assembly being defined and marks policy as resolved.

If the dynamic Assembly is saved to disk, subsequent loads will get grants based on policies associated with the location where the Assembly was saved.

This method should only be used to define a dynamic assembly in the current application domain. For more information, see the Remarks section of the topic.

The name parameter indirectly specifies a Version (as an OperatingSystem.#ctor constructor parameter). However, this method only persists the major and minor version numbers, not the build and revision numbers. For example, if the Assembly.LoadFrom method is used to indirectly recover the Version for this assembly, only that object's major and minor version numbers will be as originally specified.

Example
The following sample demonstrates the AppDomain.DefineDynamicAssembly method and AppDomain.AssemblyResolve event.
using System;
using System.Reflection;
using System.Reflection.Emit;

class Test {
   public static void Main() {
      AppDomain currentDomain = AppDomain.CurrentDomain;

      InstantiateMyDynamicType(currentDomain);   // Failed!
      
      currentDomain.AssemblyResolve += new ResolveEventHandler(MyResolveEventHandler);
      
      InstantiateMyDynamicType(currentDomain);   // OK!
   }

   static void InstantiateMyDynamicType(AppDomain domain) {
      try {
         domain.CreateInstance("MyDynamicAssembly", "MyDynamicType");
      } catch (Exception e) {
         Console.WriteLine(e.Message);
      }
   }   

   static Assembly MyResolveEventHandler(object sender, ResolveEventArgs args) {
      return DefineDynamicAssembly((AppDomain) sender);
   }
   
   static Assembly DefineDynamicAssembly(AppDomain domain) {
      // Build a dynamic assembly using Reflection Emit API.
   
      AssemblyName assemblyName = new AssemblyName();
      assemblyName.Name = "MyDynamicAssembly";

      AssemblyBuilder assemblyBuilder = domain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run);
      ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule("MyDynamicModule");
      TypeBuilder typeBuilder = moduleBuilder.DefineType("MyDynamicType", TypeAttributes.Public);
      ConstructorBuilder constructorBuilder = typeBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, null);
      ILGenerator ilGenerator = constructorBuilder.GetILGenerator();
      
      ilGenerator.EmitWriteLine("MyDynamicType instantiated!");
      ilGenerator.Emit(OpCodes.Ret);

      typeBuilder.CreateType();

      return assemblyBuilder;
   }
}

    

Return to top


Overloaded Method: DefineDynamicAssembly(
   AssemblyName name,
   AssemblyBuilderAccess access,
   PermissionSet requiredPermissions,
   PermissionSet optionalPermissions,
   PermissionSet refusedPermissions
)
Summary
Defines a dynamic assembly using the specified name, access mode, and permission requests.
This class is not CLS Compliant

C# Syntax:
AssemblyBuilder DefineDynamicAssembly(
   AssemblyName name,
   AssemblyBuilderAccess access,
   PermissionSet requiredPermissions,
   PermissionSet optionalPermissions,
   PermissionSet refusedPermissions
);
Parameters:

name

The unique identity of the dynamic assembly.

access

The mode in which the dynamic assembly will be accessed.

requiredPermissions

The required permissions request.

optionalPermissions

The optional permissions request.

refusedPermissions

The refused permissions request.

Return Value:
Represents the dynamic assembly created.
Exceptions
Exception Type Condition
ArgumentNullException name is null.
ArgumentException The Name property of name is null.

-or-

The Name property of name begins with white space, or contains a forward or backward slash.

Remarks
This method should only be used to define a dynamic assembly in the current application domain. For more information, see the Remarks section of the topic.

The name parameter indirectly specifies a Version (as an OperatingSystem.#ctor constructor parameter). However, this method only persists the major and minor version numbers, not the build and revision numbers. For example, if the Assembly.LoadFrom method is used to indirectly recover the Version for this assembly, only that object's major and minor version numbers will be as originally specified.

Example
The following sample demonstrates the AppDomain.DefineDynamicAssembly method and AppDomain.AssemblyResolve event.
using System;
using System.Reflection;
using System.Reflection.Emit;

class Test {
   public static void Main() {
      AppDomain currentDomain = AppDomain.CurrentDomain;

      InstantiateMyDynamicType(currentDomain);   // Failed!
      
      currentDomain.AssemblyResolve += new ResolveEventHandler(MyResolveEventHandler);
      
      InstantiateMyDynamicType(currentDomain);   // OK!
   }

   static void InstantiateMyDynamicType(AppDomain domain) {
      try {
         domain.CreateInstance("MyDynamicAssembly", "MyDynamicType");
      } catch (Exception e) {
         Console.WriteLine(e.Message);
      }
   }   

   static Assembly MyResolveEventHandler(object sender, ResolveEventArgs args) {
      return DefineDynamicAssembly((AppDomain) sender);
   }
   
   static Assembly DefineDynamicAssembly(AppDomain domain) {
      // Build a dynamic assembly using Reflection Emit API.
   
      AssemblyName assemblyName = new AssemblyName();
      assemblyName.Name = "MyDynamicAssembly";

      AssemblyBuilder assemblyBuilder = domain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run);
      ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule("MyDynamicModule");
      TypeBuilder typeBuilder = moduleBuilder.DefineType("MyDynamicType", TypeAttributes.Public);
      ConstructorBuilder constructorBuilder = typeBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, null);
      ILGenerator ilGenerator = constructorBuilder.GetILGenerator();
      
      ilGenerator.EmitWriteLine("MyDynamicType instantiated!");
      ilGenerator.Emit(OpCodes.Ret);

      typeBuilder.CreateType();

      return assemblyBuilder;
   }
}

    

Return to top


Overloaded Method: DefineDynamicAssembly(
   AssemblyName name,
   AssemblyBuilderAccess access,
   Evidence evidence,
   PermissionSet requiredPermissions,
   PermissionSet optionalPermissions,
   PermissionSet refusedPermissions
)
Summary
Defines a dynamic assembly using the specified name, access mode, evidence, and permission requests.
This class is not CLS Compliant

C# Syntax:
AssemblyBuilder DefineDynamicAssembly(
   AssemblyName name,
   AssemblyBuilderAccess access,
   Evidence evidence,
   PermissionSet requiredPermissions,
   PermissionSet optionalPermissions,
   PermissionSet refusedPermissions
);
Parameters:

name

The unique identity of the dynamic assembly.

access

The mode in which the dynamic assembly will be accessed.

evidence

The evidence supplied for the dynamic assembly.

requiredPermissions

The required permissions request.

optionalPermissions

The optional permissions request.

refusedPermissions

The refused permissions request.

Return Value:
Represents the dynamic assembly created.
Exceptions
Exception Type Condition
ArgumentNullException name is null.
ArgumentException The Name property of name is null.

-or-

The Name property of name begins with white space, or contains a forward or backward slash.

Remarks
Only fully trusted callers can supply their evidence when defining a dynamic Assembly. The runtime will map the Evidence through the security policy to determine the granted permissions. Partially trusted callers must supply a null evidence. If evidence is null, the runtime copies the permission sets, that is, the current grant and deny sets, from the caller's Assembly to the dynamic Assembly being defined and marks policy as resolved.

If the dynamic Assembly is saved to disk, subsequent loads will get grants based on policies associated with the location where the Assembly was saved.

This method should only be used to define a dynamic assembly in the current application domain. For more information, see the Remarks section of the topic.

The name parameter indirectly specifies a Version (as an OperatingSystem.#ctor constructor parameter). However, this method only persists the major and minor version numbers, not the build and revision numbers. For example, if the Assembly.LoadFrom method is used to indirectly recover the Version for this assembly, only that object's major and minor version numbers will be as originally specified.

Example
The following sample demonstrates the AppDomain.DefineDynamicAssembly method and AppDomain.AssemblyResolve event.
using System;
using System.Reflection;
using System.Reflection.Emit;

class Test {
   public static void Main() {
      AppDomain currentDomain = AppDomain.CurrentDomain;

      InstantiateMyDynamicType(currentDomain);   // Failed!
      
      currentDomain.AssemblyResolve += new ResolveEventHandler(MyResolveEventHandler);
      
      InstantiateMyDynamicType(currentDomain);   // OK!
   }

   static void InstantiateMyDynamicType(AppDomain domain) {
      try {
         domain.CreateInstance("MyDynamicAssembly", "MyDynamicType");
      } catch (Exception e) {
         Console.WriteLine(e.Message);
      }
   }   

   static Assembly MyResolveEventHandler(object sender, ResolveEventArgs args) {
      return DefineDynamicAssembly((AppDomain) sender);
   }
   
   static Assembly DefineDynamicAssembly(AppDomain domain) {
      // Build a dynamic assembly using Reflection Emit API.
   
      AssemblyName assemblyName = new AssemblyName();
      assemblyName.Name = "MyDynamicAssembly";

      AssemblyBuilder assemblyBuilder = domain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run);
      ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule("MyDynamicModule");
      TypeBuilder typeBuilder = moduleBuilder.DefineType("MyDynamicType", TypeAttributes.Public);
      ConstructorBuilder constructorBuilder = typeBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, null);
      ILGenerator ilGenerator = constructorBuilder.GetILGenerator();
      
      ilGenerator.EmitWriteLine("MyDynamicType instantiated!");
      ilGenerator.Emit(OpCodes.Ret);

      typeBuilder.CreateType();

      return assemblyBuilder;
   }
}

    

Return to top


Overloaded Method: DefineDynamicAssembly(
   AssemblyName name,
   AssemblyBuilderAccess access,
   string dir,
   PermissionSet requiredPermissions,
   PermissionSet optionalPermissions,
   PermissionSet refusedPermissions
)
Summary
Defines a dynamic assembly using the specified name, access mode, storage directory, and permission requests.
This class is not CLS Compliant

C# Syntax:
AssemblyBuilder DefineDynamicAssembly(
   AssemblyName name,
   AssemblyBuilderAccess access,
   string dir,
   PermissionSet requiredPermissions,
   PermissionSet optionalPermissions,
   PermissionSet refusedPermissions
);
Parameters:

name

The unique identity of the dynamic assembly.

access

The mode in which the dynamic assembly will be accessed.

dir

The name of the directory where the assembly will be saved. If dir is null, the directory defaults to the current directory.

requiredPermissions

The required permissions request.

optionalPermissions

The optional permissions request.

refusedPermissions

The refused permissions request.

Return Value:
Represents the dynamic assembly created.
Exceptions
Exception Type Condition
ArgumentNullException name is null.
ArgumentException The Name property of name is null.

-or-

The Name property of name begins with white space, or contains a forward or backward slash.

Remarks
This method should only be used to define a dynamic assembly in the current application domain. For more information, see the Remarks section of the topic.

The name parameter indirectly specifies a Version (as an OperatingSystem.#ctor constructor parameter). However, this method only persists the major and minor version numbers, not the build and revision numbers. For example, if the Assembly.LoadFrom method is used to indirectly recover the Version for this assembly, only that object's major and minor version numbers will be as originally specified.

Example
The following sample demonstrates the AppDomain.DefineDynamicAssembly method and AppDomain.AssemblyResolve event.
using System;
using System.Reflection;
using System.Reflection.Emit;

class Test {
   public static void Main() {
      AppDomain currentDomain = AppDomain.CurrentDomain;

      InstantiateMyDynamicType(currentDomain);   // Failed!
      
      currentDomain.AssemblyResolve += new ResolveEventHandler(MyResolveEventHandler);
      
      InstantiateMyDynamicType(currentDomain);   // OK!
   }

   static void InstantiateMyDynamicType(AppDomain domain) {
      try {
         domain.CreateInstance("MyDynamicAssembly", "MyDynamicType");
      } catch (Exception e) {
         Console.WriteLine(e.Message);
      }
   }   

   static Assembly MyResolveEventHandler(object sender, ResolveEventArgs args) {
      return DefineDynamicAssembly((AppDomain) sender);
   }
   
   static Assembly DefineDynamicAssembly(AppDomain domain) {
      // Build a dynamic assembly using Reflection Emit API.
   
      AssemblyName assemblyName = new AssemblyName();
      assemblyName.Name = "MyDynamicAssembly";

      AssemblyBuilder assemblyBuilder = domain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run);
      ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule("MyDynamicModule");
      TypeBuilder typeBuilder = moduleBuilder.DefineType("MyDynamicType", TypeAttributes.Public);
      ConstructorBuilder constructorBuilder = typeBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, null);
      ILGenerator ilGenerator = constructorBuilder.GetILGenerator();
      
      ilGenerator.EmitWriteLine("MyDynamicType instantiated!");
      ilGenerator.Emit(OpCodes.Ret);

      typeBuilder.CreateType();

      return assemblyBuilder;
   }
}

    

Return to top


Overloaded Method: DefineDynamicAssembly(
   AssemblyName name,
   AssemblyBuilderAccess access,
   string dir,
   Evidence evidence,
   PermissionSet requiredPermissions,
   PermissionSet optionalPermissions,
   PermissionSet refusedPermissions
)
Summary
Defines a dynamic assembly using the specified name, access mode, storage directory, evidence, and permission requests.
This class is not CLS Compliant

C# Syntax:
AssemblyBuilder DefineDynamicAssembly(
   AssemblyName name,
   AssemblyBuilderAccess access,
   string dir,
   Evidence evidence,
   PermissionSet requiredPermissions,
   PermissionSet optionalPermissions,
   PermissionSet refusedPermissions
);
Parameters:

name

The unique identity of the dynamic assembly.

access

The mode in which the dynamic assembly will be accessed.

dir

The name of the directory where the assembly will be saved. If dir is null, the directory defaults to the current directory.

evidence

The evidence supplied for the dynamic assembly.

requiredPermissions

The required permissions request.

optionalPermissions

The optional permissions request.

refusedPermissions

The refused permissions request.

Return Value:
Represents the dynamic assembly created.
Exceptions
Exception Type Condition
ArgumentNullException name is null.
ArgumentException The Name property of name is null.

-or-

The Name property of name begins with white space, or contains a forward or backward slash.

Remarks
Only fully trusted callers can supply their evidence when defining a dynamic Assembly. The runtime will map the Evidence through the security policy to determine the granted permissions. Partially trusted callers must supply a null evidence. If evidence is null, the runtime copies the permission sets, that is, the current grant and deny sets, from the caller's Assembly to the dynamic Assembly being defined and marks policy as resolved.

If the dynamic Assembly is saved to disk, subsequent loads will get grants based on policies associated with the location where the Assembly was saved.

This method should only be used to define a dynamic assembly in the current application domain. For more information, see the Remarks section of the topic.

The name parameter indirectly specifies a Version (as an OperatingSystem.#ctor constructor parameter). However, this method only persists the major and minor version numbers, not the build and revision numbers. For example, if the Assembly.LoadFrom method is used to indirectly recover the Version for this assembly, only that object's major and minor version numbers will be as originally specified.

Example
The following sample demonstrates the AppDomain.DefineDynamicAssembly method and AppDomain.AssemblyResolve event.
using System;
using System.Reflection;
using System.Reflection.Emit;

class Test {
   public static void Main() {
      AppDomain currentDomain = AppDomain.CurrentDomain;

      InstantiateMyDynamicType(currentDomain);   // Failed!
      
      currentDomain.AssemblyResolve += new ResolveEventHandler(MyResolveEventHandler);
      
      InstantiateMyDynamicType(currentDomain);   // OK!
   }

   static void InstantiateMyDynamicType(AppDomain domain) {
      try {
         domain.CreateInstance("MyDynamicAssembly", "MyDynamicType");
      } catch (Exception e) {
         Console.WriteLine(e.Message);
      }
   }   

   static Assembly MyResolveEventHandler(object sender, ResolveEventArgs args) {
      return DefineDynamicAssembly((AppDomain) sender);
   }
   
   static Assembly DefineDynamicAssembly(AppDomain domain) {
      // Build a dynamic assembly using Reflection Emit API.
   
      AssemblyName assemblyName = new AssemblyName();
      assemblyName.Name = "MyDynamicAssembly";

      AssemblyBuilder assemblyBuilder = domain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run);
      ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule("MyDynamicModule");
      TypeBuilder typeBuilder = moduleBuilder.DefineType("MyDynamicType", TypeAttributes.Public);
      ConstructorBuilder constructorBuilder = typeBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, null);
      ILGenerator ilGenerator = constructorBuilder.GetILGenerator();
      
      ilGenerator.EmitWriteLine("MyDynamicType instantiated!");
      ilGenerator.Emit(OpCodes.Ret);

      typeBuilder.CreateType();

      return assemblyBuilder;
   }
}

    

Return to top


Overloaded Method: DefineDynamicAssembly(
   AssemblyName name,
   AssemblyBuilderAccess access,
   string dir,
   Evidence evidence,
   PermissionSet requiredPermissions,
   PermissionSet optionalPermissions,
   PermissionSet refusedPermissions,
   bool isSynchronized
)
Summary
Defines a dynamic assembly using the specified name, access mode, storage directory, evidence, permission requests, and synchronization option.
This class is not CLS Compliant

C# Syntax:
AssemblyBuilder DefineDynamicAssembly(
   AssemblyName name,
   AssemblyBuilderAccess access,
   string dir,
   Evidence evidence,
   PermissionSet requiredPermissions,
   PermissionSet optionalPermissions,
   PermissionSet refusedPermissions,
   bool isSynchronized
);
Parameters:

name

The unique identity of the dynamic assembly.

access

The mode in which the dynamic assembly will be accessed.

dir

The name of the directory where the dynamic assembly will be saved. If dir is null, the directory defaults to the current directory.

evidence

The evidence supplied for the dynamic assembly.

requiredPermissions

The required permissions request.

optionalPermissions

The optional permissions request.

refusedPermissions

The refused permissions request.

isSynchronized

true to synchronize the creation of modules, types, and members in the dynamic assembly; otherwise, false.true to synchronize the creation of modules, types, and members in the dynamic assembly; otherwise, false.

Return Value:
Represents the dynamic assembly created.
Exceptions
Exception Type Condition
ArgumentNullException name is null.
ArgumentException The Name property of name is null.

-or-

The Name property of name begins with white space, or contains a forward or backward slash.

Remarks
Only fully trusted callers can supply their evidence when defining a dynamic Assembly. The runtime will map the Evidence through the security policy to determine the granted permissions. Partially trusted callers must supply null for the evidence parameter. If evidence is null, the runtime copies the permission sets, that is, the current grant and deny sets, from the caller's Assembly to the dynamic Assembly being defined and marks policy as resolved.

If the dynamic Assembly is saved to disk, subsequent loads will get grants based on policies associated with the location where the Assembly was saved.

The name parameter indirectly specifies a Version object (as an OperatingSystem.#ctor constructor parameter). However, this method only persists the major and minor version numbers, not the build and revision numbers. That is, for example, if the Assembly.LoadFrom method is used to indirectly recover the Version object for this assembly, only that object's major and minor version numbers will be as originally specified.

Example
The following sample demonstrates the AppDomain.DefineDynamicAssembly method and AppDomain.AssemblyResolve event.
using System;
using System.Reflection;
using System.Reflection.Emit;

class Test {
   public static void Main() {
      AppDomain currentDomain = AppDomain.CurrentDomain;

      InstantiateMyDynamicType(currentDomain);   // Failed!
      
      currentDomain.AssemblyResolve += new ResolveEventHandler(MyResolveEventHandler);
      
      InstantiateMyDynamicType(currentDomain);   // OK!
   }

   static void InstantiateMyDynamicType(AppDomain domain) {
      try {
         domain.CreateInstance("MyDynamicAssembly", "MyDynamicType");
      } catch (Exception e) {
         Console.WriteLine(e.Message);
      }
   }   

   static Assembly MyResolveEventHandler(object sender, ResolveEventArgs args) {
      return DefineDynamicAssembly((AppDomain) sender);
   }
   
   static Assembly DefineDynamicAssembly(AppDomain domain) {
      // Build a dynamic assembly using Reflection Emit API.
   
      AssemblyName assemblyName = new AssemblyName();
      assemblyName.Name = "MyDynamicAssembly";

      AssemblyBuilder assemblyBuilder = domain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run);
      ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule("MyDynamicModule");
      TypeBuilder typeBuilder = moduleBuilder.DefineType("MyDynamicType", TypeAttributes.Public);
      ConstructorBuilder constructorBuilder = typeBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, null);
      ILGenerator ilGenerator = constructorBuilder.GetILGenerator();
      
      ilGenerator.EmitWriteLine("MyDynamicType instantiated!");
      ilGenerator.Emit(OpCodes.Ret);

      typeBuilder.CreateType();

      return assemblyBuilder;
   }
}

    

Return to top


Method: DoCallBack(
   CrossAppDomainDelegate theDelegate
)
Summary
Executes the code in another application domain that is identified by the specified delegate.
This class is not CLS Compliant

C# Syntax:
void DoCallBack(
   CrossAppDomainDelegate theDelegate
);
Parameters:

theDelegate

A delegate that specifies a method to call.

Remarks
theDelegate can specify a marshal-by-value, MarshalByRefObject, or ContextBoundObject object.

Return to top


Method: Equals(
   object other
)
Summary
Returns a value indicating whether this instance is equal to a specified object.
This class is not CLS Compliant

C# Syntax:
bool Equals(
   object other
);
Parameters:

other

An object to compare with this instance, or null.

Return Value:
true if other is an instance of AppDomain and equals the value of this instance; otherwise, false.

Return to top


Overloaded Method: ExecuteAssembly(
   string assemblyFile
)
Summary
Execute the Assembly given its file name. The method specified in the .NET Framework header is called.
This class is not CLS Compliant

C# Syntax:
int ExecuteAssembly(
   string assemblyFile
);
Parameters:

assemblyFile

The file name of the the assembly to be executed.

Return Value:
The value returned by the entry point of the assembly.
Exceptions
Exception Type Condition
ArgumentNullException assemblyFile is null.
FileNotFoundException assemblyFile is not found.
BadImageFormatException assemblyFile is not a valid assembly.
Remarks
The method does not spawn a new process, create a new application domain, or create a new thread on which the entry point method is executed. To create the AppDomain to be loaded and executed, use the AppDomain.CreateDomain method.

Return to top


Overloaded Method: ExecuteAssembly(
   string assemblyFile,
   Evidence assemblySecurity
)
Summary
Execute the Assembly given its file name and supplied evidence.
This class is not CLS Compliant

C# Syntax:
int ExecuteAssembly(
   string assemblyFile,
   Evidence assemblySecurity
);
Parameters:

assemblyFile

The name of the file from which the assembly is to be loaded.

assemblySecurity

Evidence for loading the assembly.

Return Value:
The value returned by the entry point of the assembly.
Exceptions
Exception Type Condition
ArgumentNullException assemblyFile is null.
FileNotFoundException assemblyFile is not found.
BadImageFormatException assemblyFile is not a valid assembly.
Remarks
The method does not spawn a new process, create a new application domain, or execute the entry point method on a new thread.

Return to top


Overloaded Method: ExecuteAssembly(
   string assemblyFile,
   Evidence assemblySecurity,
   string[] args
)
Summary
Execute the Assembly given its file name and supplied Evidence. Optionally, the Assembly can be loaded into the domain-neutral code area for use by multiple AppDomains.
This class is not CLS Compliant

C# Syntax:
int ExecuteAssembly(
   string assemblyFile,
   Evidence assemblySecurity,
   string[] args
);
Parameters:

assemblyFile

The name of the file from which the assembly is to be loaded.

assemblySecurity

The supplied evidence for the assembly.

args

The arguments to the entry point of the assembly.

Return Value:
The value returned by the entry point of the assembly.
Exceptions
Exception Type Condition
ArgumentNullException assemblyFile is null.
FileNotFoundException assemblyFile is not found.
BadImageFormatException assemblyFile is not a valid assembly.
Re