AppDomain.Load Methode

Definition

Lädt eine Assembly in diese Anwendungsdomäne.Loads an Assembly into this application domain.

Überlädt

Load(Byte[])

Lädt die Assembly mit einem COFF-Image (Common Object File Format), das eine angegebene Assembly enthält.Loads the Assembly with a common object file format (COFF) based image containing an emitted Assembly.

Load(AssemblyName)

Lädt eine Assembly bei Angabe ihres AssemblyName.Loads an Assembly given its AssemblyName.

Load(String)

Lädt eine Assembly bei Angabe ihres Anzeigenamens.Loads an Assembly given its display name.

Load(Byte[], Byte[])

Lädt die Assembly mit einem COFF-Image (Common Object File Format), das eine angegebene Assembly enthält.Loads the Assembly with a common object file format (COFF) based image containing an emitted Assembly. Die Rohdatenbytes, die die Symbole für die Assembly darstellen, werden ebenfalls geladen.The raw bytes representing the symbols for the Assembly are also loaded.

Load(AssemblyName, Evidence)

Lädt eine Assembly bei Angabe ihres AssemblyName.Loads an Assembly given its AssemblyName.

Load(String, Evidence)

Lädt eine Assembly bei Angabe ihres Anzeigenamens.Loads an Assembly given its display name.

Load(Byte[], Byte[], Evidence)

Lädt die Assembly mit einem COFF-Image (Common Object File Format), das eine angegebene Assembly enthält.Loads the Assembly with a common object file format (COFF) based image containing an emitted Assembly. Die Rohdatenbytes, die die Symbole für die Assembly darstellen, werden ebenfalls geladen.The raw bytes representing the symbols for the Assembly are also loaded.

Load(Byte[])

Lädt die Assembly mit einem COFF-Image (Common Object File Format), das eine angegebene Assembly enthält.Loads the Assembly with a common object file format (COFF) based image containing an emitted Assembly.

public:
 virtual System::Reflection::Assembly ^ Load(cli::array <System::Byte> ^ rawAssembly);
public System.Reflection.Assembly Load (byte[] rawAssembly);
abstract member Load : byte[] -> System.Reflection.Assembly
override this.Load : byte[] -> System.Reflection.Assembly
Public Function Load (rawAssembly As Byte()) As Assembly

Parameter

rawAssembly
Byte[]

Ein Array vom Typ byte, das ein COFF-Image mit einer ausgegebenen Assembly ist.An array of type byte that is a COFF-based image containing an emitted assembly.

Gibt zurück

Die geladene Assembly.The loaded assembly.

Implementiert

Ausnahmen

rawAssembly ist null.rawAssembly is null.

rawAssembly ist keine gültige Assembly.rawAssembly is not a valid assembly.

- oder --or- Version 2.0 oder höher der Common Language Runtime ist derzeit geladen, und rawAssembly wurde mit einer höheren Version kompiliert.Version 2.0 or later of the common language runtime is currently loaded and rawAssembly was compiled with a later version.

Der Vorgang wird für eine entladene Anwendungsdomäne ausgeführt.The operation is attempted on an unloaded application domain.

Eine Assembly oder ein Modul wurde zweimal mit zwei unterschiedlichen Beweisen geladen.An assembly or module was loaded twice with two different evidences.

Beispiele

Im folgenden Beispiel wird die Verwendung des Ladens einer Rohdatenassembly veranschaulicht.The following sample demonstrates the use of loading a raw assembly.

Damit dieses Codebeispiel ausgeführt werden kann, müssen Sie den voll qualifizierten Assemblynamen angeben.For this code example to run, you must provide the fully qualified assembly name. Informationen zum Abrufen des voll qualifizierten Assemblynamens finden Sie unter Assemblynamen.For information about how to obtain the fully qualified assembly name, see Assembly Names.

using namespace System;
using namespace System::IO;
using namespace System::Reflection;
using namespace System::Reflection::Emit;
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 ) 
   {
      Console::WriteLine( e->Message );
   }

}


// Loads the content of a file to a Byte array.
array<Byte>^ loadFile( String^ filename )
{
   FileStream^ fs = gcnew FileStream( filename,FileMode::Open );
   array<Byte>^buffer = gcnew array<Byte>((int)fs->Length);
   fs->Read( buffer, 0, buffer->Length );
   fs->Close();
   return buffer;
}


// Creates a dynamic assembly with symbol information
// and saves them to temp.dll and temp.pdb
void EmitAssembly( AppDomain^ domain )
{
   AssemblyName^ assemblyName = gcnew 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, nullptr );
   ILGenerator^ ilGenerator = constructorBuilder->GetILGenerator();
   ilGenerator->EmitWriteLine( "MyType instantiated!" );
   ilGenerator->Emit( OpCodes::Ret );
   typeBuilder->CreateType();
   assemblyBuilder->Save( "temp.dll" );
}

ref class Resolver
{
public:
   static Assembly^ MyResolver( Object^ sender, ResolveEventArgs^ args )
   {
      AppDomain^ domain = dynamic_cast<AppDomain^>(sender);
      
      // Once the files are generated, this call is
      // actually no longer necessary.
      EmitAssembly( domain );
      array<Byte>^rawAssembly = loadFile( "temp.dll" );
      array<Byte>^rawSymbolStore = loadFile( "temp.pdb" );
      Assembly^ assembly = domain->Load( rawAssembly, rawSymbolStore );
      return assembly;
   }

};

int main()
{
   AppDomain^ currentDomain = AppDomain::CurrentDomain;
   InstantiateMyType( currentDomain ); // Failed!
   currentDomain->AssemblyResolve += gcnew ResolveEventHandler( Resolver::MyResolver );
   InstantiateMyType( currentDomain ); // OK!
}

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) {
         Console.WriteLine(e.Message);
      }
   }
   
   // 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);
      fs.Close();
   
      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.
      EmitAssembly(domain);
      
      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!");
      ilGenerator.Emit(OpCodes.Ret);

      typeBuilder.CreateType();
      
      assemblyBuilder.Save("temp.dll");
   }
}
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
   
   
   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
   
   
   ' 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 - 1)) 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

End Module 'Test

Hinweise

Beginnend mit dem .NET Framework 4.NET Framework 4ist die Vertrauens Ebene einer Assembly, die mit dieser Methode geladen wird, mit der Vertrauens Ebene der Anwendungsdomäne identisch.Beginning with the .NET Framework 4.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.

Diese Methode sollte nur verwendet werden, um eine Assembly in die aktuelle Anwendungsdomäne zu laden.This method should be used only to load an assembly into the current application domain. Diese Methode wird für Interoperabilitäts Aufrufer bereitgestellt, die die statische Assembly.Load Methode nicht aufzurufen.This method is provided as a convenience for interoperability callers who cannot call the static Assembly.Load method. Verwenden Sie zum Laden von Assemblys in andere Anwendungs Domänen eine Methode, z. b. CreateInstanceAndUnwrap.To load assemblies into other application domains, use a method such as CreateInstanceAndUnwrap.

Informationen, die allen über Ladungen dieser Methode gemeinsam sind, finden Sie in der Load(AssemblyName)-Methoden Überladung.For information that is common to all overloads of this method, see the Load(AssemblyName) method overload.

Sicherheit

FileIOPermission
für den Zugriff zum Lesen aus einer Datei oder einem Verzeichnis und für den Zugriff auf die Informationen im Pfad selbst.for access to read from a file or directory, and for access to the information in the path itself. Zugehörige Enumerationen: ReadPathDiscovery.Associated enumerations: Read, PathDiscovery.

Load(AssemblyName)

Lädt eine Assembly bei Angabe ihres AssemblyName.Loads an Assembly given its AssemblyName.

public:
 virtual System::Reflection::Assembly ^ Load(System::Reflection::AssemblyName ^ assemblyRef);
public System.Reflection.Assembly Load (System.Reflection.AssemblyName assemblyRef);
abstract member Load : System.Reflection.AssemblyName -> System.Reflection.Assembly
override this.Load : System.Reflection.AssemblyName -> System.Reflection.Assembly
Public Function Load (assemblyRef As AssemblyName) As Assembly

Parameter

assemblyRef
AssemblyName

Ein Objekt, das die zu ladende Assembly beschreibt.An object that describes the assembly to load.

Gibt zurück

Die geladene Assembly.The loaded assembly.

Implementiert

Ausnahmen

assemblyRef ist null.assemblyRef is null.

assemblyRef wurde nicht gefunden.assemblyRef is not found.

assemblyRef ist keine gültige Assembly.assemblyRef is not a valid assembly.

- oder --or- Version 2.0 oder höher der Common Language Runtime ist derzeit geladen, und assemblyRef wurde mit einer höheren Version kompiliert.Version 2.0 or later of the common language runtime is currently loaded and assemblyRef was compiled with a later version.

Der Vorgang wird für eine entladene Anwendungsdomäne ausgeführt.The operation is attempted on an unloaded application domain.

Eine Assembly oder ein Modul wurde zweimal mit zwei unterschiedlichen Beweisen geladen.An assembly or module was loaded twice with two different evidences.

Hinweise

Diese Methode sollte nur verwendet werden, um eine Assembly in die aktuelle Anwendungsdomäne zu laden.This method should be used only to load an assembly into the current application domain. Diese Methode wird für Interoperabilitäts Aufrufer bereitgestellt, die die statische Assembly.Load Methode nicht aufzurufen.This method is provided as a convenience for interoperability callers who cannot call the static Assembly.Load method. Verwenden Sie zum Laden von Assemblys in andere Anwendungs Domänen eine Methode, z. b. CreateInstanceAndUnwrap.To load assemblies into other application domains, use a method such as CreateInstanceAndUnwrap.

Wenn eine Version der angeforderten Assembly bereits geladen ist, gibt diese Methode die geladene Assembly zurück, auch wenn eine andere Version angefordert wird.If a version of the requested assembly is already loaded, this method returns the loaded assembly, even if a different version is requested.

Es wird nicht empfohlen, einen partiellen Assemblynamen für assemblyRef anzugeben.Supplying a partial assembly name for assemblyRef is not recommended. (Ein partieller Name lässt mindestens ein Kultur-, Versions-oder öffentliches Schlüssel Token aus.(A partial name omits one or more of culture, version, or public key token. Bei über Ladungen, die anstelle eines AssemblyName Objekts eine Zeichenfolge verwenden, ist "MyAssembly, Version = 1.0.0.0" ein Beispiel für einen vollständigen Namen, und "MyAssembly, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = 18ab3442da84 B47" ist ein Beispiel für einen vollständigen Namen.) Die Verwendung von partiellen Namen wirkt sich negativ auf die Leistung aus.For overloads that take a string instead of an AssemblyName object, "MyAssembly, Version=1.0.0.0" is an example of a partial name and "MyAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=18ab3442da84b47" is an example of a full name.) Using partial names has a negative effect on performance. Außerdem kann ein partieller AssemblyName eine Assembly nur aus dem globalen Assemblycache laden, wenn eine exakte Kopie der Assembly im Anwendungs Basisverzeichnis (BaseDirectory oder AppDomainSetup.ApplicationBase) vorhanden ist.In addition, a partial assembly name can load an assembly from the global assembly cache only if there is an exact copy of the assembly in the application base directory (BaseDirectory or AppDomainSetup.ApplicationBase).

Wenn das aktuelle AppDomain-Objekt die Anwendungsdomäne Adarstellt und die Load-Methode von der Anwendungs Domänen Baufgerufen wird, wird die Assembly in beide Anwendungs Domänen geladen.If the current AppDomain object represents application domain A, and the Load method is called from application domain B, the assembly is loaded into both application domains. Der folgende Code lädt beispielsweise MyAssembly in die neue Anwendungsdomäne ChildDomain und auch in die Anwendungsdomäne, in der der Code ausgeführt wird:For example, the following code loads MyAssembly into the new application domain ChildDomain and also into the application domain where the code executes:

AppDomain^ ad = AppDomain::CreateDomain("ChildDomain");
ad->Load("MyAssembly");
AppDomain ad = AppDomain.CreateDomain("ChildDomain");
ad.Load("MyAssembly");
Dim ad As AppDomain  = AppDomain.CreateDomain("ChildDomain")
ad.Load("MyAssembly")

Die Assembly wird in beide Domänen geladen, da Assembly nicht von MarshalByRefObjectabgeleitet ist und daher der Rückgabewert der Load Methode nicht gemarshallt werden kann.The assembly is loaded into both domains because Assembly does not derive from MarshalByRefObject, and therefore the return value of the Load method cannot be marshaled. Stattdessen versucht der Common Language Runtime, die Assembly in die aufrufende Anwendungsdomäne zu laden.Instead, the common language runtime tries to load the assembly into the calling application domain. Die in die zwei Anwendungs Domänen geladenen Assemblys können unterschiedlich sein, wenn sich die Pfad Einstellungen für die beiden Anwendungs Domänen unterscheiden.The assemblies that are loaded into the two application domains might be different if the path settings for the two application domains are different.

Hinweis

Wenn sowohl die AssemblyName.Name-Eigenschaft als auch die AssemblyName.CodeBase-Eigenschaft festgelegt sind, wird beim ersten Versuch, die Assembly zu laden, der Anzeige Name (einschließlich Version, Kultur usw.) verwendet, der von der Assembly.FullName-Eigenschaft zurückgegeben wird.If both the AssemblyName.Name property and the AssemblyName.CodeBase property are set, the first attempt to load the assembly uses the display name (including version, culture, and so on, as returned by the Assembly.FullName property). Wenn die Datei nicht gefunden wird, wird die CodeBase-Eigenschaft verwendet, um nach der Assembly zu suchen.If the file is not found, the CodeBase property is used to search for the assembly. Wenn die Assembly mit CodeBasegefunden wird, wird der Anzeige Name mit der Assembly abgeglichen.If the assembly is found using CodeBase, the display name is matched against the assembly. Wenn die Entsprechung fehlschlägt, wird eine FileLoadException ausgelöst.If the match fails, a FileLoadException is thrown.

Sicherheit

FileIOPermission
für den Zugriff zum Lesen aus einer Datei oder einem Verzeichnis und für den Zugriff auf die Informationen im Pfad selbst.for access to read from a file or directory, and for access to the information in the path itself. Zugehörige Enumerationen: ReadPathDiscovery.Associated enumerations: Read, PathDiscovery.

Load(String)

Lädt eine Assembly bei Angabe ihres Anzeigenamens.Loads an Assembly given its display name.

public:
 virtual System::Reflection::Assembly ^ Load(System::String ^ assemblyString);
public System.Reflection.Assembly Load (string assemblyString);
abstract member Load : string -> System.Reflection.Assembly
override this.Load : string -> System.Reflection.Assembly
Public Function Load (assemblyString As String) As Assembly

Parameter

assemblyString
String

Der Anzeigename der Assembly.The display name of the assembly. Siehe FullName.See FullName.

Gibt zurück

Die geladene Assembly.The loaded assembly.

Implementiert

Ausnahmen

assemblyString ist gleich null.assemblyString is null

assemblyString nicht gefunden wurde.assemblyString is not found.

assemblyString ist keine gültige Assembly.assemblyString is not a valid assembly.

- oder --or- Version 2.0 oder höher der Common Language Runtime ist derzeit geladen, und assemblyString wurde mit einer höheren Version kompiliert.Version 2.0 or later of the common language runtime is currently loaded and assemblyString was compiled with a later version.

Der Vorgang wird für eine entladene Anwendungsdomäne ausgeführt.The operation is attempted on an unloaded application domain.

Eine Assembly oder ein Modul wurde zweimal mit zwei unterschiedlichen Beweisen geladen.An assembly or module was loaded twice with two different evidences.

Hinweise

Diese Methode sollte nur verwendet werden, um eine Assembly in die aktuelle Anwendungsdomäne zu laden.This method should be used only to load an assembly into the current application domain. Diese Methode wird für Interoperabilitäts Aufrufer bereitgestellt, die die statische Assembly.Load Methode nicht aufzurufen.This method is provided as a convenience for interoperability callers who cannot call the static Assembly.Load method. Verwenden Sie zum Laden von Assemblys in andere Anwendungs Domänen eine Methode, z. b. CreateInstanceAndUnwrap.To load assemblies into other application domains, use a method such as CreateInstanceAndUnwrap.

Informationen, die allen über Ladungen dieser Methode gemeinsam sind, finden Sie in der Load(AssemblyName)-Methoden Überladung.For information that is common to all overloads of this method, see the Load(AssemblyName) method overload.

Sicherheit

FileIOPermission
für den Zugriff zum Lesen aus einer Datei oder einem Verzeichnis und für den Zugriff auf die Informationen im Pfad selbst.for access to read from a file or directory, and for access to the information in the path itself. Zugehörige Enumerationen: ReadPathDiscovery.Associated enumerations: Read, PathDiscovery.

WebPermission
die Möglichkeit, auf den Speicherort der Assembly zuzugreifen, wenn die Assembly nicht lokal ist.for the ability to access the location of the assembly if the assembly is not local.

Load(Byte[], Byte[])

Lädt die Assembly mit einem COFF-Image (Common Object File Format), das eine angegebene Assembly enthält.Loads the Assembly with a common object file format (COFF) based image containing an emitted Assembly. Die Rohdatenbytes, die die Symbole für die Assembly darstellen, werden ebenfalls geladen.The raw bytes representing the symbols for the Assembly are also loaded.

public:
 virtual System::Reflection::Assembly ^ Load(cli::array <System::Byte> ^ rawAssembly, cli::array <System::Byte> ^ rawSymbolStore);
public System.Reflection.Assembly Load (byte[] rawAssembly, byte[] rawSymbolStore);
abstract member Load : byte[] * byte[] -> System.Reflection.Assembly
override this.Load : byte[] * byte[] -> System.Reflection.Assembly
Public Function Load (rawAssembly As Byte(), rawSymbolStore As Byte()) As Assembly

Parameter

rawAssembly
Byte[]

Ein Array vom Typ byte, das ein COFF-Image mit einer ausgegebenen Assembly ist.An array of type byte that is a COFF-based image containing an emitted assembly.

rawSymbolStore
Byte[]

Ein Array vom Typ byte, das die Rohdatenbytes enthält, die die Symbole für die Assembly darstellen.An array of type byte containing the raw bytes representing the symbols for the assembly.

Gibt zurück

Die geladene Assembly.The loaded assembly.

Implementiert

Ausnahmen

rawAssembly ist null.rawAssembly is null.

rawAssembly ist keine gültige Assembly.rawAssembly is not a valid assembly.

- oder --or- Version 2.0 oder höher der Common Language Runtime ist derzeit geladen, und rawAssembly wurde mit einer höheren Version kompiliert.Version 2.0 or later of the common language runtime is currently loaded and rawAssembly was compiled with a later version.

Der Vorgang wird für eine entladene Anwendungsdomäne ausgeführt.The operation is attempted on an unloaded application domain.

Eine Assembly oder ein Modul wurde zweimal mit zwei unterschiedlichen Beweisen geladen.An assembly or module was loaded twice with two different evidences.

Beispiele

Im folgenden Beispiel wird die Verwendung des Ladens einer Rohdatenassembly veranschaulicht.The following sample demonstrates the use of loading a raw assembly.

Damit dieses Codebeispiel ausgeführt werden kann, müssen Sie den voll qualifizierten Assemblynamen angeben.For this code example to run, you must provide the fully qualified assembly name. Informationen zum Abrufen des voll qualifizierten Assemblynamens finden Sie unter Assemblynamen.For information about how to obtain the fully qualified assembly name, see Assembly Names.

using namespace System;
using namespace System::IO;
using namespace System::Reflection;
using namespace System::Reflection::Emit;
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 ) 
   {
      Console::WriteLine( e->Message );
   }

}


// Loads the content of a file to a Byte array.
array<Byte>^ loadFile( String^ filename )
{
   FileStream^ fs = gcnew FileStream( filename,FileMode::Open );
   array<Byte>^buffer = gcnew array<Byte>((int)fs->Length);
   fs->Read( buffer, 0, buffer->Length );
   fs->Close();
   return buffer;
}


// Creates a dynamic assembly with symbol information
// and saves them to temp.dll and temp.pdb
void EmitAssembly( AppDomain^ domain )
{
   AssemblyName^ assemblyName = gcnew 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, nullptr );
   ILGenerator^ ilGenerator = constructorBuilder->GetILGenerator();
   ilGenerator->EmitWriteLine( "MyType instantiated!" );
   ilGenerator->Emit( OpCodes::Ret );
   typeBuilder->CreateType();
   assemblyBuilder->Save( "temp.dll" );
}

ref class Resolver
{
public:
   static Assembly^ MyResolver( Object^ sender, ResolveEventArgs^ args )
   {
      AppDomain^ domain = dynamic_cast<AppDomain^>(sender);
      
      // Once the files are generated, this call is
      // actually no longer necessary.
      EmitAssembly( domain );
      array<Byte>^rawAssembly = loadFile( "temp.dll" );
      array<Byte>^rawSymbolStore = loadFile( "temp.pdb" );
      Assembly^ assembly = domain->Load( rawAssembly, rawSymbolStore );
      return assembly;
   }

};

int main()
{
   AppDomain^ currentDomain = AppDomain::CurrentDomain;
   InstantiateMyType( currentDomain ); // Failed!
   currentDomain->AssemblyResolve += gcnew ResolveEventHandler( Resolver::MyResolver );
   InstantiateMyType( currentDomain ); // OK!
}

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) {
         Console.WriteLine(e.Message);
      }
   }
   
   // 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);
      fs.Close();
   
      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.
      EmitAssembly(domain);
      
      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!");
      ilGenerator.Emit(OpCodes.Ret);

      typeBuilder.CreateType();
      
      assemblyBuilder.Save("temp.dll");
   }
}
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
   
   
   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
   
   
   ' 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 - 1)) 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

End Module 'Test

Hinweise

Beginnend mit dem .NET Framework 4.NET Framework 4ist die Vertrauens Ebene einer Assembly, die mit dieser Methode geladen wird, mit der Vertrauens Ebene der Anwendungsdomäne identisch.Beginning with the .NET Framework 4.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.

Diese Methode sollte nur verwendet werden, um eine Assembly in die aktuelle Anwendungsdomäne zu laden.This method should be used only to load an assembly into the current application domain. Diese Methode wird für Interoperabilitäts Aufrufer bereitgestellt, die die statische Assembly.Load Methode nicht aufzurufen.This method is provided as a convenience for interoperability callers who cannot call the static Assembly.Load method. Verwenden Sie zum Laden von Assemblys in andere Anwendungs Domänen eine Methode, z. b. CreateInstanceAndUnwrap.To load assemblies into other application domains, use a method such as CreateInstanceAndUnwrap.

Informationen, die allen über Ladungen dieser Methode gemeinsam sind, finden Sie in der Load(AssemblyName)-Methoden Überladung.For information that is common to all overloads of this method, see the Load(AssemblyName) method overload.

Sicherheit

WebPermission
zum Lesen eines URIs, der nicht mit "file://" beginnt.for reading a URI that does not begin with "file://".

FileIOPermission
für den Zugriff zum Lesen aus einer Datei oder einem Verzeichnis und für den Zugriff auf die Informationen im Pfad selbst.for access to read from a file or directory, and for access to the information in the path itself. Zugehörige Enumerationen: ReadPathDiscovery.Associated enumerations: Read, PathDiscovery.

Load(AssemblyName, Evidence)

Warnung

Diese API ist jetzt veraltet.

Lädt eine Assembly bei Angabe ihres AssemblyName.Loads an Assembly given its AssemblyName.

public:
 System::Reflection::Assembly ^ Load(System::Reflection::AssemblyName ^ assemblyRef, System::Security::Policy::Evidence ^ assemblySecurity);
[System.Obsolete("Use an overload that does not take an Evidence parameter")]
[System.Obsolete("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 https://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
public System.Reflection.Assembly Load (System.Reflection.AssemblyName assemblyRef, System.Security.Policy.Evidence assemblySecurity);
member this.Load : System.Reflection.AssemblyName * System.Security.Policy.Evidence -> System.Reflection.Assembly
Public Function Load (assemblyRef As AssemblyName, assemblySecurity As Evidence) As Assembly

Parameter

assemblyRef
AssemblyName

Ein Objekt, das die zu ladende Assembly beschreibt.An object that describes the assembly to load.

assemblySecurity
Evidence

Beweis für das Laden der Assembly.Evidence for loading the assembly.

Gibt zurück

Die geladene Assembly.The loaded assembly.

Implementiert

Attribute

Ausnahmen

assemblyRef ist gleich null.assemblyRef is null

assemblyRef nicht gefunden wurde.assemblyRef is not found.

assemblyRef ist keine gültige Assembly.assemblyRef is not a valid assembly.

- oder --or- Version 2.0 oder höher der Common Language Runtime ist derzeit geladen, und assemblyRef wurde mit einer höheren Version kompiliert.Version 2.0 or later of the common language runtime is currently loaded and assemblyRef was compiled with a later version.

Der Vorgang wird für eine entladene Anwendungsdomäne ausgeführt.The operation is attempted on an unloaded application domain.

Eine Assembly oder ein Modul wurde zweimal mit zwei unterschiedlichen Beweisen geladen.An assembly or module was loaded twice with two different evidences.

Hinweise

Diese Methode sollte nur verwendet werden, um eine Assembly in die aktuelle Anwendungsdomäne zu laden.This method should be used only to load an assembly into the current application domain. Diese Methode wird für Interoperabilitäts Aufrufer bereitgestellt, die die statische Assembly.Load Methode nicht aufzurufen.This method is provided as a convenience for interoperability callers who cannot call the static Assembly.Load method. Verwenden Sie zum Laden von Assemblys in andere Anwendungs Domänen eine Methode, z. b. CreateInstanceAndUnwrap.To load assemblies into other application domains, use a method such as CreateInstanceAndUnwrap.

Informationen, die allen über Ladungen dieser Methode gemeinsam sind, finden Sie in der Load(AssemblyName)-Methoden Überladung.For information that is common to all overloads of this method, see the Load(AssemblyName) method overload.

Sicherheit

FileIOPermission
für den Zugriff zum Lesen aus einer Datei oder einem Verzeichnis und für den Zugriff auf die Informationen im Pfad selbst.for access to read from a file or directory, and for access to the information in the path itself. Zugehörige Enumerationen: ReadPathDiscovery.Associated enumerations: Read, PathDiscovery.

SecurityPermission
So laden Sie eine Assembly mit beweisento load an assembly with evidence. Zugeordnete Enumeration: ControlEvidenceAssociated enumeration: ControlEvidence.

WebPermission
zum Lesen eines Pfades, der nicht das Format "file://" oder "\\unc\dir\" oder "c:\" hat.for reading a path that is not in the form "file://" or "\\UNC\dir\" or "c:\".

Load(String, Evidence)

Warnung

Diese API ist jetzt veraltet.

Lädt eine Assembly bei Angabe ihres Anzeigenamens.Loads an Assembly given its display name.

public:
 System::Reflection::Assembly ^ Load(System::String ^ assemblyString, System::Security::Policy::Evidence ^ assemblySecurity);
[System.Obsolete("Use an overload that does not take an Evidence parameter")]
[System.Obsolete("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 https://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
public System.Reflection.Assembly Load (string assemblyString, System.Security.Policy.Evidence assemblySecurity);
member this.Load : string * System.Security.Policy.Evidence -> System.Reflection.Assembly
Public Function Load (assemblyString As String, assemblySecurity As Evidence) As Assembly

Parameter

assemblyString
String

Der Anzeigename der Assembly.The display name of the assembly. Siehe FullName.See FullName.

assemblySecurity
Evidence

Beweis für das Laden der Assembly.Evidence for loading the assembly.

Gibt zurück

Die geladene Assembly.The loaded assembly.

Implementiert

Attribute

Ausnahmen

assemblyString ist gleich null.assemblyString is null

assemblyString nicht gefunden wurde.assemblyString is not found.

assemblyString ist keine gültige Assembly.assemblyString is not a valid assembly.

- oder --or- Version 2.0 oder höher der Common Language Runtime ist derzeit geladen, und assemblyString wurde mit einer höheren Version kompiliert.Version 2.0 or later of the common language runtime is currently loaded and assemblyString was compiled with a later version.

Der Vorgang wird für eine entladene Anwendungsdomäne ausgeführt.The operation is attempted on an unloaded application domain.

Eine Assembly oder ein Modul wurde zweimal mit zwei unterschiedlichen Beweisen geladen.An assembly or module was loaded twice with two different evidences.

Hinweise

Diese Methode sollte nur verwendet werden, um eine Assembly in die aktuelle Anwendungsdomäne zu laden.This method should be used only to load an assembly into the current application domain. Diese Methode wird für Interoperabilitäts Aufrufer bereitgestellt, die die statische Assembly.Load Methode nicht aufzurufen.This method is provided as a convenience for interoperability callers who cannot call the static Assembly.Load method. Verwenden Sie zum Laden von Assemblys in andere Anwendungs Domänen eine Methode, z. b. CreateInstanceAndUnwrap.To load assemblies into other application domains, use a method such as CreateInstanceAndUnwrap.

Informationen, die allen über Ladungen dieser Methode gemeinsam sind, finden Sie in der Load(AssemblyName)-Methoden Überladung.For information that is common to all overloads of this method, see the Load(AssemblyName) method overload.

Sicherheit

SecurityPermission
So laden Sie eine Assembly mit beweisento load an assembly with evidence. Zugeordnete Enumeration: ControlEvidenceAssociated enumeration: ControlEvidence.

FileIOPermission
für den Zugriff zum Lesen aus einer Datei oder einem Verzeichnis und für den Zugriff auf die Informationen im Pfad selbst.for access to read from a file or directory, and for access to the information in the path itself. Zugehörige Enumerationen: ReadPathDiscovery.Associated enumerations: Read, PathDiscovery.

WebPermission
zum Lesen eines Pfades, der nicht das Format "file://" oder "\\unc\dir\" oder "c:\" hat.for reading a path that is not in the form "file://" or "\\UNC\dir\" or "c:\".

Load(Byte[], Byte[], Evidence)

Warnung

Diese API ist jetzt veraltet.

Lädt die Assembly mit einem COFF-Image (Common Object File Format), das eine angegebene Assembly enthält.Loads the Assembly with a common object file format (COFF) based image containing an emitted Assembly. Die Rohdatenbytes, die die Symbole für die Assembly darstellen, werden ebenfalls geladen.The raw bytes representing the symbols for the Assembly are also loaded.

public:
 System::Reflection::Assembly ^ Load(cli::array <System::Byte> ^ rawAssembly, cli::array <System::Byte> ^ rawSymbolStore, System::Security::Policy::Evidence ^ securityEvidence);
[System.Obsolete("Use an overload that does not take an Evidence parameter")]
[System.Obsolete("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 https://go.microsoft.com/fwlink/?LinkId=155570 for more information.")]
public System.Reflection.Assembly Load (byte[] rawAssembly, byte[] rawSymbolStore, System.Security.Policy.Evidence securityEvidence);
member this.Load : byte[] * byte[] * System.Security.Policy.Evidence -> System.Reflection.Assembly
Public Function Load (rawAssembly As Byte(), rawSymbolStore As Byte(), securityEvidence As Evidence) As Assembly

Parameter

rawAssembly
Byte[]

Ein Array vom Typ byte, das ein COFF-Image mit einer ausgegebenen Assembly ist.An array of type byte that is a COFF-based image containing an emitted assembly.

rawSymbolStore
Byte[]

Ein Array vom Typ byte, das die Rohdatenbytes enthält, die die Symbole für die Assembly darstellen.An array of type byte containing the raw bytes representing the symbols for the assembly.

securityEvidence
Evidence

Beweis für das Laden der Assembly.Evidence for loading the assembly.

Gibt zurück

Die geladene Assembly.The loaded assembly.

Implementiert

Attribute

Ausnahmen

rawAssembly ist null.rawAssembly is null.

rawAssembly ist keine gültige Assembly.rawAssembly is not a valid assembly.

- oder --or- Version 2.0 oder höher der Common Language Runtime ist derzeit geladen, und rawAssembly wurde mit einer höheren Version kompiliert.Version 2.0 or later of the common language runtime is currently loaded and rawAssembly was compiled with a later version.

Der Vorgang wird für eine entladene Anwendungsdomäne ausgeführt.The operation is attempted on an unloaded application domain.

Eine Assembly oder ein Modul wurde zweimal mit zwei unterschiedlichen Beweisen geladen.An assembly or module was loaded twice with two different evidences.

securityEvidence ist nicht null.securityEvidence is not null. Wenn die Legacy-CAS-Richtlinie nicht aktiviert ist, sollte securityEvidence dem Wert null entsprechen.When legacy CAS policy is not enabled, securityEvidence should be null.

Beispiele

Im folgenden Beispiel wird die Verwendung des Ladens einer Rohdatenassembly veranschaulicht.The following sample demonstrates the use of loading a raw assembly.

Damit dieses Codebeispiel ausgeführt werden kann, müssen Sie den voll qualifizierten Assemblynamen angeben.For this code example to run, you must provide the fully qualified assembly name. Informationen zum Abrufen des voll qualifizierten Assemblynamens finden Sie unter Assemblynamen.For information about how to obtain the fully qualified assembly name, see Assembly Names.

using namespace System;
using namespace System::IO;
using namespace System::Reflection;
using namespace System::Reflection::Emit;
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 ) 
   {
      Console::WriteLine( e->Message );
   }

}


// Loads the content of a file to a Byte array.
array<Byte>^ loadFile( String^ filename )
{
   FileStream^ fs = gcnew FileStream( filename,FileMode::Open );
   array<Byte>^buffer = gcnew array<Byte>((int)fs->Length);
   fs->Read( buffer, 0, buffer->Length );
   fs->Close();
   return buffer;
}


// Creates a dynamic assembly with symbol information
// and saves them to temp.dll and temp.pdb
void EmitAssembly( AppDomain^ domain )
{
   AssemblyName^ assemblyName = gcnew 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, nullptr );
   ILGenerator^ ilGenerator = constructorBuilder->GetILGenerator();
   ilGenerator->EmitWriteLine( "MyType instantiated!" );
   ilGenerator->Emit( OpCodes::Ret );
   typeBuilder->CreateType();
   assemblyBuilder->Save( "temp.dll" );
}

ref class Resolver
{
public:
   static Assembly^ MyResolver( Object^ sender, ResolveEventArgs^ args )
   {
      AppDomain^ domain = dynamic_cast<AppDomain^>(sender);
      
      // Once the files are generated, this call is
      // actually no longer necessary.
      EmitAssembly( domain );
      array<Byte>^rawAssembly = loadFile( "temp.dll" );
      array<Byte>^rawSymbolStore = loadFile( "temp.pdb" );
      Assembly^ assembly = domain->Load( rawAssembly, rawSymbolStore );
      return assembly;
   }

};

int main()
{
   AppDomain^ currentDomain = AppDomain::CurrentDomain;
   InstantiateMyType( currentDomain ); // Failed!
   currentDomain->AssemblyResolve += gcnew ResolveEventHandler( Resolver::MyResolver );
   InstantiateMyType( currentDomain ); // OK!
}

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) {
         Console.WriteLine(e.Message);
      }
   }
   
   // 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);
      fs.Close();
   
      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.
      EmitAssembly(domain);
      
      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!");
      ilGenerator.Emit(OpCodes.Ret);

      typeBuilder.CreateType();
      
      assemblyBuilder.Save("temp.dll");
   }
}
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
   
   
   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
   
   
   ' 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 - 1)) 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

End Module 'Test

Hinweise

Beginnend mit dem .NET Framework 4.NET Framework 4ist die Vertrauens Ebene einer Assembly, die mit dieser Methode geladen wird, mit der Vertrauens Ebene der Anwendungsdomäne identisch.Beginning with the .NET Framework 4.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.

Diese Methode sollte nur verwendet werden, um eine Assembly in die aktuelle Anwendungsdomäne zu laden.This method should be used only to load an assembly into the current application domain. Diese Methode wird für Interoperabilitäts Aufrufer bereitgestellt, die die statische Assembly.Load Methode nicht aufzurufen.This method is provided as a convenience for interoperability callers who cannot call the static Assembly.Load method. Verwenden Sie zum Laden von Assemblys in andere Anwendungs Domänen eine Methode, z. b. CreateInstanceAndUnwrap.To load assemblies into other application domains, use a method such as CreateInstanceAndUnwrap.

Informationen, die allen über Ladungen dieser Methode gemeinsam sind, finden Sie in der Load(AssemblyName)-Methoden Überladung.For information that is common to all overloads of this method, see the Load(AssemblyName) method overload.

Sicherheit

SecurityPermission
zum Bereitstellen von beweisen.to provide evidence. Zugeordnete Enumeration: ControlEvidenceAssociated enumeration: ControlEvidence. Sicherheitsaktion: Demand.Security action: Demand.

FileIOPermission
für den Zugriff zum Lesen aus einer Datei oder einem Verzeichnis und für den Zugriff auf die Informationen im Pfad selbst.for access to read from a file or directory, and for access to the information in the path itself. Zugehörige Enumerationen: ReadPathDiscovery.Associated enumerations: Read, PathDiscovery.

WebPermission
zum Lesen eines Pfades, der nicht das Format "file://" oder "\\unc\dir\" oder "c:\" hat.for reading a path that is not in the form "file://" or "\\UNC\dir\" or "c:\".

Gilt für: