AppDomain.Load Method (Byte[], Byte[], Evidence)


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

obsoleteCodeEntityM:System.AppDomain.Load(System.Byte[],System.Byte[])Note: This API is now obsolete.

Loads the Assembly with a common object file format (COFF) based image containing an emitted Assembly. The raw bytes representing the symbols for the Assembly are also loaded.

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

[ObsoleteAttribute("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of Load which does not take an Evidence parameter. See for more information.")]
[SecurityPermissionAttribute(SecurityAction.Demand, ControlEvidence = true)]
public Assembly Load(
	byte[] rawAssembly,
	byte[] rawSymbolStore,
	Evidence securityEvidence


Type: System.Byte[]

An array of type byte that is a COFF-based image containing an emitted assembly.

Type: System.Byte[]

An array of type byte containing the raw bytes representing the symbols for the assembly.

Type: System.Security.Policy.Evidence

Evidence for loading the assembly.

Return Value

Type: System.Reflection.Assembly

The loaded assembly.

Exception Condition

rawAssembly is null.


rawAssembly is not a valid assembly.


Version 2.0 or later of the common language runtime is currently loaded and rawAssembly was compiled with a later version.


The operation is attempted on an unloaded application domain.


An assembly or module was loaded twice with two different evidences.


securityEvidence is not null. When legacy CAS policy is not enabled, securityEvidence should be null.

Beginning with the .NET Framework 4, the trust level of an assembly that is loaded by using this method is the same as the trust level of the application domain.

This method should be used only to load an assembly into the current application domain. This method is provided as a convenience for interoperability callers who cannot call the static Assembly.Load method. To load assemblies into other application domains, use a method such as CreateInstanceAndUnwrap.

For information that is common to all overloads of this method, see the Load(AssemblyName) method overload.

The following sample demonstrates the use of loading a raw assembly.

For this code example to run, you must provide the fully qualified assembly name. For information about how to obtain the fully qualified assembly name, see Assembly Names.

using System;
using System.IO;
using System.Reflection;
using System.Reflection.Emit;

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

      InstantiateMyType(currentDomain);   // Failed!

      currentDomain.AssemblyResolve += new ResolveEventHandler(MyResolver);

      InstantiateMyType(currentDomain);   // OK!

   static void InstantiateMyType(AppDomain domain) {
      try {
	 // You must supply a valid fully qualified assembly name here.
         domain.CreateInstance("Assembly text name, Version, Culture, PublicKeyToken", "MyType");
      } catch (Exception e) {

   // Loads the content of a file to a byte array. 
   static byte[] loadFile(string filename) {
      FileStream fs = new FileStream(filename, FileMode.Open);
      byte[] buffer = new byte[(int) fs.Length];
      fs.Read(buffer, 0, buffer.Length);

      return buffer;

   static Assembly MyResolver(object sender, ResolveEventArgs args) {
      AppDomain domain = (AppDomain) sender;

      // Once the files are generated, this call is
      // actually no longer necessary.

      byte[] rawAssembly = loadFile("temp.dll");
      byte[] rawSymbolStore = loadFile("temp.pdb");
      Assembly assembly = domain.Load(rawAssembly, rawSymbolStore);

      return assembly;

   // Creates a dynamic assembly with symbol information
   // and saves them to temp.dll and temp.pdb
   static void EmitAssembly(AppDomain domain) {
      AssemblyName assemblyName = new AssemblyName();
      assemblyName.Name = "MyAssembly";

      AssemblyBuilder assemblyBuilder = domain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Save);
      ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule("MyModule", "temp.dll", true);
      TypeBuilder typeBuilder = moduleBuilder.DefineType("MyType", TypeAttributes.Public);

      ConstructorBuilder constructorBuilder = typeBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, null);
      ILGenerator ilGenerator = constructorBuilder.GetILGenerator();
      ilGenerator.EmitWriteLine("MyType instantiated!");




to provide evidence. Associated enumeration: SecurityPermissionFlag.ControlEvidence. Security action: Demand.


for access to read from a file or directory, and for access to the information in the path itself. Associated enumerations: FileIOPermissionAccess.Read, FileIOPermissionAccess.PathDiscovery.


for reading a path that is not in the form "file://" or "\\UNC\dir\" or "c:\".

.NET Framework
Available since 1.1
Return to top