AppDomain.Load Method (Byte())
Loads the Assembly with a common object file format (COFF) based image containing an emitted Assembly.
Assembly: mscorlib (in mscorlib.dll)
Parameters
- rawAssembly
-
Type:
System.Byte()
An array of type byte that is a COFF-based image containing an emitted assembly.
Implements
_AppDomain.Load(Byte())| Exception | Condition |
|---|---|
| ArgumentNullException | rawAssembly is null. |
| BadImageFormatException | rawAssembly is not a valid assembly. -or- Version 2.0 or later of the common language runtime is currently loaded and rawAssembly was compiled with a later version. |
| AppDomainUnloadedException | The operation is attempted on an unloaded application domain. |
| FileLoadException | An assembly or module was loaded twice with two different evidences. |
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.
Imports System Imports System.IO Imports System.Reflection Imports System.Reflection.Emit Module Test Sub Main() Dim currentDomain As AppDomain = AppDomain.CurrentDomain InstantiateMyType(currentDomain) ' Failed! AddHandler currentDomain.AssemblyResolve, AddressOf MyResolver InstantiateMyType(currentDomain) ' OK! End Sub 'Main Sub InstantiateMyType(domain As AppDomain) Try ' You must supply a valid fully qualified assembly name here. domain.CreateInstance("Assembly text name, Version, Culture, PublicKeyToken", "MyType") Catch e As Exception Console.WriteLine(e.Message) End Try End Sub 'InstantiateMyType ' Loads the content of a file to a byte array. Function loadFile(filename As String) As Byte() Dim fs As New FileStream(filename, FileMode.Open) Dim buffer(CInt(fs.Length)) As Byte fs.Read(buffer, 0, buffer.Length) fs.Close() Return buffer End Function 'loadFile Function MyResolver(sender As Object, args As ResolveEventArgs) As System.Reflection.Assembly Dim domain As AppDomain = DirectCast(sender, AppDomain) ' Once the files are generated, this call is ' actually no longer necessary. EmitAssembly(domain) Dim rawAssembly As Byte() = loadFile("temp.dll") Dim rawSymbolStore As Byte() = loadFile("temp.pdb") Dim myAssembly As System.Reflection.Assembly = domain.Load(rawAssembly, rawSymbolStore) Return myAssembly End Function 'MyResolver ' Creates a dynamic assembly with symbol information ' and saves them to temp.dll and temp.pdb Sub EmitAssembly(domain As AppDomain) Dim assemblyName As New AssemblyName() assemblyName.Name = "MyAssembly" Dim assemblyBuilder As AssemblyBuilder = domain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Save) Dim moduleBuilder As ModuleBuilder = assemblyBuilder.DefineDynamicModule("MyModule", "temp.dll", True) Dim typeBuilder As TypeBuilder = moduleBuilder.DefineType("MyType", TypeAttributes.Public) Dim constructorBuilder As ConstructorBuilder = typeBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, Nothing) Dim ilGenerator As ILGenerator = constructorBuilder.GetILGenerator() ilGenerator.EmitWriteLine("MyType instantiated!") ilGenerator.Emit(OpCodes.Ret) typeBuilder.CreateType() assemblyBuilder.Save("temp.dll") End Sub 'EmitAssembly End Module 'Test
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.
Available since 1.1