AppDomain.Load Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Lädt eine Assembly in diese Anwendungsdomäne.
Überlädt
Load(Byte[]) |
Lädt die Assembly mit einem COFF-Image (Common Object File Format), das eine angegebene Assembly enthält. |
Load(AssemblyName) |
Lädt eine Assembly bei Angabe ihres AssemblyName. |
Load(String) |
Lädt eine Assembly bei Angabe ihres Anzeigenamens. |
Load(Byte[], Byte[]) |
Lädt die Assembly mit einem COFF-Image (Common Object File Format), das eine angegebene Assembly enthält. Die Rohdatenbytes, die die Symbole für die Assembly darstellen, werden ebenfalls geladen. |
Load(AssemblyName, Evidence) |
Veraltet.
Lädt eine Assembly bei Angabe ihres AssemblyName. |
Load(String, Evidence) |
Veraltet.
Lädt eine Assembly bei Angabe ihres Anzeigenamens. |
Load(Byte[], Byte[], Evidence) |
Veraltet.
Lädt die Assembly mit einem COFF-Image (Common Object File Format), das eine angegebene Assembly enthält. Die Rohdatenbytes, die die Symbole für die Assembly darstellen, werden ebenfalls geladen. |
Load(Byte[])
- Quelle:
- AppDomain.cs
- Quelle:
- AppDomain.cs
- Quelle:
- AppDomain.cs
public:
System::Reflection::Assembly ^ Load(cli::array <System::Byte> ^ rawAssembly);
public:
virtual System::Reflection::Assembly ^ Load(cli::array <System::Byte> ^ rawAssembly);
public System.Reflection.Assembly Load (byte[] rawAssembly);
member this.Load : byte[] -> System.Reflection.Assembly
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.
Gibt zurück
Die geladene Assembly.
Implementiert
Ausnahmen
rawAssembly
ist null
.
rawAssembly
ist keine gültige Assembly für die derzeit geladene Runtime.
Der Vorgang wird für eine entladene Anwendungsdomäne ausgeführt.
Eine Assembly oder ein Modul wurde zweimal mit zwei unterschiedlichen Beweisen geladen.
Beispiele
Im folgenden Beispiel wird die Verwendung des Ladens einer Rohassembly veranschaulicht.
Damit dieses Codebeispiel ausgeführt werden kann, müssen Sie den vollqualifizierten Assemblynamen angeben. Informationen zum Abrufen des vollqualifizierten Assemblynamens finden Sie unter Assemblynamen.
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 LoadRawSnippet {
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");
}
}
open System
open System.IO
open System.Reflection
open System.Reflection.Emit
let instantiateMyType (domain: AppDomain) =
try
// You must supply a valid fully qualified assembly name here.
domain.CreateInstance("Assembly text name, Version, Culture, PublicKeyToken", "MyType")
|> ignore
with e ->
printfn $"{e.Message}"
// Loads the content of a file to a byte array.
let loadFile filename =
use fs = new FileStream(filename, FileMode.Open)
let buffer = Array.zeroCreate<byte> (int fs.Length)
fs.Read(buffer, 0, buffer.Length) |> ignore
fs.Close()
buffer
// Creates a dynamic assembly with symbol information
// and saves them to temp.dll and temp.pdb
let emitAssembly (domain: AppDomain) =
let assemblyName = AssemblyName()
assemblyName.Name <- "MyAssembly"
let assemblyBuilder = domain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Save)
let moduleBuilder = assemblyBuilder.DefineDynamicModule("MyModule", "temp.dll", true)
let typeBuilder = moduleBuilder.DefineType("MyType", TypeAttributes.Public)
let constructorBuilder = typeBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, null)
let ilGenerator = constructorBuilder.GetILGenerator()
ilGenerator.EmitWriteLine "MyType instantiated!"
ilGenerator.Emit OpCodes.Ret
typeBuilder.CreateType() |> ignore
assemblyBuilder.Save "temp.dll"
let myResolver (sender: obj) (args: ResolveEventArgs) =
let domain = sender :?> AppDomain
// Once the files are generated, this call is
// actually no longer necessary.
emitAssembly domain
let rawAssembly = loadFile "temp.dll"
let rawSymbolStore = loadFile "temp.pdb"
domain.Load(rawAssembly, rawSymbolStore)
let currentDomain = AppDomain.CurrentDomain
instantiateMyType currentDomain // Failed!
currentDomain.add_AssemblyResolve (ResolveEventHandler myResolver)
instantiateMyType currentDomain // OK!
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
Informationen, die allen Überladungen dieser Methode gemeinsam sind, finden Sie in der Load(AssemblyName) Methodenüberladung.
Ab dem .NET Framework 4 entspricht die Vertrauensebene einer Assembly, die mit dieser Methode geladen wird, der Vertrauensebene der Anwendungsdomäne.
Gilt für:
Load(AssemblyName)
- Quelle:
- AppDomain.cs
- Quelle:
- AppDomain.cs
- Quelle:
- AppDomain.cs
Lädt eine Assembly bei Angabe ihres AssemblyName.
public:
System::Reflection::Assembly ^ Load(System::Reflection::AssemblyName ^ assemblyRef);
public:
virtual System::Reflection::Assembly ^ Load(System::Reflection::AssemblyName ^ assemblyRef);
public System.Reflection.Assembly Load (System.Reflection.AssemblyName assemblyRef);
member this.Load : System.Reflection.AssemblyName -> System.Reflection.Assembly
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.
Gibt zurück
Die geladene Assembly.
Implementiert
Ausnahmen
assemblyRef
ist null
.
assemblyRef
wurde nicht gefunden.
assemblyRef
ist keine gültige Assembly für die derzeit geladene Runtime.
Der Vorgang wird für eine entladene Anwendungsdomäne ausgeführt.
Eine Assembly oder ein Modul wurde zweimal mit zwei unterschiedlichen Beweisen geladen.
Hinweise
Diese Methode sollte nur verwendet werden, um eine Assembly in die aktuelle Anwendungsdomäne zu laden. Diese Methode wird als Komfort für Interoperabilitätsaufrufer bereitgestellt, die die statische Assembly.Load Methode nicht aufrufen können. Verwenden Sie eine Methode wie CreateInstanceAndUnwrap, um Assemblys in andere Anwendungsdomänen zu laden.
Wenn bereits eine Version der angeforderten Assembly geladen ist, gibt diese Methode die geladene Assembly zurück, auch wenn eine andere Version angefordert wird.
Die Angabe eines partiellen Assemblynamens für assemblyRef
wird nicht empfohlen. (Bei einem teiliellen Namen wird mindestens ein Kultur-, Versions- oder öffentliches Schlüsseltoken weggelassen. Für Überladungen, die anstelle eines AssemblyName Objekts eine Zeichenfolge verwenden, ist "MyAssembly, Version=1.0.0.0" ein Beispiel für einen Teilnamen, und "MyAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=18ab3442da84b47" ist ein Beispiel für einen vollständigen Namen.) Die Verwendung von Teilnamen wirkt sich negativ auf die Leistung aus. Darüber hinaus kann ein Partieller Assemblyname eine Assembly aus dem globalen Assemblycache nur laden, wenn eine genaue Kopie der Assembly im Anwendungsbasisverzeichnis (BaseDirectory oder AppDomainSetup.ApplicationBase) vorhanden ist.
Wenn das aktuelle AppDomain Objekt die Anwendungsdomäne A
darstellt und die Methode von der Load Anwendungsdomäne B
aufgerufen wird, wird die Assembly in beide Anwendungsdomänen geladen. Der folgende Code wird beispielsweise in die neue Anwendungsdomäne ChildDomain
und auch in die Anwendungsdomäne geladenMyAssembly
, in der der Code ausgeführt wird:
AppDomain^ ad = AppDomain::CreateDomain("ChildDomain");
ad->Load("MyAssembly");
AppDomain ad = AppDomain.CreateDomain("ChildDomain");
ad.Load("MyAssembly");
let 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 sie nicht von MarshalByRefObjectabgeleitet ist und daher der Rückgabewert der Load -Methode nicht gemarshallt werden kann. Stattdessen versucht die Common Language Runtime, die Assembly in die aufrufende Anwendungsdomäne zu laden. Die Assemblys, die in die beiden Anwendungsdomänen geladen werden, können unterschiedlich sein, wenn die Pfadeinstellungen für die beiden Anwendungsdomänen unterschiedlich sind.
Hinweis
Wenn sowohl die AssemblyName.Name -Eigenschaft als auch die AssemblyName.CodeBase -Eigenschaft festgelegt sind, verwendet der erste Versuch, die Assembly zu laden, den Anzeigenamen (einschließlich Version, Kultur usw., wie von der Assembly.FullName -Eigenschaft zurückgegeben). Wenn die Datei nicht gefunden wird, wird die CodeBase -Eigenschaft verwendet, um nach der Assembly zu suchen. Wenn die Assembly mit CodeBasegefunden wird, wird der Anzeigename mit der Assembly abgeglichen. Wenn die Übereinstimmung fehlschlägt, wird ein FileLoadException ausgelöst.
Gilt für:
Load(String)
- Quelle:
- AppDomain.cs
- Quelle:
- AppDomain.cs
- Quelle:
- AppDomain.cs
Lädt eine Assembly bei Angabe ihres Anzeigenamens.
public:
System::Reflection::Assembly ^ Load(System::String ^ assemblyString);
public:
virtual System::Reflection::Assembly ^ Load(System::String ^ assemblyString);
public System.Reflection.Assembly Load (string assemblyString);
member this.Load : string -> System.Reflection.Assembly
abstract member Load : string -> System.Reflection.Assembly
override this.Load : string -> System.Reflection.Assembly
Public Function Load (assemblyString As String) As Assembly
Parameter
Gibt zurück
Die geladene Assembly.
Implementiert
Ausnahmen
assemblyString
ist gleich null
.
assemblyString
wurde nicht gefunden.
assemblyString
ist keine gültige Assembly für die derzeit geladene Runtime.
Der Vorgang wird für eine entladene Anwendungsdomäne ausgeführt.
Eine Assembly oder ein Modul wurde zweimal mit zwei unterschiedlichen Beweisen geladen.
Hinweise
Informationen, die allen Überladungen dieser Methode gemeinsam sind, finden Sie in der Load(AssemblyName) Methodenüberladung.
Gilt für:
Load(Byte[], Byte[])
- Quelle:
- AppDomain.cs
- Quelle:
- AppDomain.cs
- Quelle:
- AppDomain.cs
public:
System::Reflection::Assembly ^ Load(cli::array <System::Byte> ^ rawAssembly, cli::array <System::Byte> ^ rawSymbolStore);
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);
public System.Reflection.Assembly Load (byte[] rawAssembly, byte[] rawSymbolStore);
member this.Load : byte[] * byte[] -> System.Reflection.Assembly
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.
- rawSymbolStore
- Byte[]
Ein Array vom Typ byte
, das die Rohdatenbytes enthält, die die Symbole für die Assembly darstellen.
Gibt zurück
Die geladene Assembly.
Implementiert
Ausnahmen
rawAssembly
ist null
.
rawAssembly
ist keine gültige Assembly für die derzeit geladene Runtime.
Der Vorgang wird für eine entladene Anwendungsdomäne ausgeführt.
Eine Assembly oder ein Modul wurde zweimal mit zwei unterschiedlichen Beweisen geladen.
Beispiele
Im folgenden Beispiel wird die Verwendung des Ladens einer Rohassembly veranschaulicht.
Damit dieses Codebeispiel ausgeführt werden kann, müssen Sie den vollqualifizierten Assemblynamen angeben. Informationen zum Abrufen des vollqualifizierten Assemblynamens finden Sie unter Assemblynamen.
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 LoadRawSnippet {
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");
}
}
open System
open System.IO
open System.Reflection
open System.Reflection.Emit
let instantiateMyType (domain: AppDomain) =
try
// You must supply a valid fully qualified assembly name here.
domain.CreateInstance("Assembly text name, Version, Culture, PublicKeyToken", "MyType")
|> ignore
with e ->
printfn $"{e.Message}"
// Loads the content of a file to a byte array.
let loadFile filename =
use fs = new FileStream(filename, FileMode.Open)
let buffer = Array.zeroCreate<byte> (int fs.Length)
fs.Read(buffer, 0, buffer.Length) |> ignore
fs.Close()
buffer
// Creates a dynamic assembly with symbol information
// and saves them to temp.dll and temp.pdb
let emitAssembly (domain: AppDomain) =
let assemblyName = AssemblyName()
assemblyName.Name <- "MyAssembly"
let assemblyBuilder = domain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Save)
let moduleBuilder = assemblyBuilder.DefineDynamicModule("MyModule", "temp.dll", true)
let typeBuilder = moduleBuilder.DefineType("MyType", TypeAttributes.Public)
let constructorBuilder = typeBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, null)
let ilGenerator = constructorBuilder.GetILGenerator()
ilGenerator.EmitWriteLine "MyType instantiated!"
ilGenerator.Emit OpCodes.Ret
typeBuilder.CreateType() |> ignore
assemblyBuilder.Save "temp.dll"
let myResolver (sender: obj) (args: ResolveEventArgs) =
let domain = sender :?> AppDomain
// Once the files are generated, this call is
// actually no longer necessary.
emitAssembly domain
let rawAssembly = loadFile "temp.dll"
let rawSymbolStore = loadFile "temp.pdb"
domain.Load(rawAssembly, rawSymbolStore)
let currentDomain = AppDomain.CurrentDomain
instantiateMyType currentDomain // Failed!
currentDomain.add_AssemblyResolve (ResolveEventHandler myResolver)
instantiateMyType currentDomain // OK!
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
Informationen, die allen Überladungen dieser Methode gemeinsam sind, finden Sie in der Load(AssemblyName) Methodenüberladung.
Ab dem .NET Framework 4 entspricht die Vertrauensebene einer Assembly, die mit dieser Methode geladen wird, der Vertrauensebene der Anwendungsdomäne.
Gilt für:
Load(AssemblyName, Evidence)
Achtung
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 http://go.microsoft.com/fwlink/?LinkID=155570 for more information.
Lädt eine Assembly bei Angabe ihres AssemblyName.
public:
virtual System::Reflection::Assembly ^ Load(System::Reflection::AssemblyName ^ assemblyRef, System::Security::Policy::Evidence ^ assemblySecurity);
public System.Reflection.Assembly Load (System.Reflection.AssemblyName assemblyRef, System.Security.Policy.Evidence assemblySecurity);
[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 http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
public System.Reflection.Assembly Load (System.Reflection.AssemblyName assemblyRef, System.Security.Policy.Evidence assemblySecurity);
abstract member Load : System.Reflection.AssemblyName * System.Security.Policy.Evidence -> System.Reflection.Assembly
override this.Load : System.Reflection.AssemblyName * System.Security.Policy.Evidence -> System.Reflection.Assembly
[<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 http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")>]
abstract member Load : System.Reflection.AssemblyName * System.Security.Policy.Evidence -> System.Reflection.Assembly
override 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.
- assemblySecurity
- Evidence
Beweis für das Laden der Assembly.
Gibt zurück
Die geladene Assembly.
Implementiert
- Attribute
Ausnahmen
assemblyRef
ist gleich null
.
assemblyRef
wurde nicht gefunden.
assemblyRef
ist keine gültige Assembly für die derzeit geladene Runtime.
Der Vorgang wird für eine entladene Anwendungsdomäne ausgeführt.
Eine Assembly oder ein Modul wurde zweimal mit zwei unterschiedlichen Beweisen geladen.
Hinweise
Informationen, die allen Überladungen dieser Methode gemeinsam sind, finden Sie in der Load(AssemblyName) Methodenüberladung.
Gilt für:
Load(String, Evidence)
Achtung
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 http://go.microsoft.com/fwlink/?LinkID=155570 for more information.
Lädt eine Assembly bei Angabe ihres Anzeigenamens.
public:
virtual System::Reflection::Assembly ^ Load(System::String ^ assemblyString, System::Security::Policy::Evidence ^ assemblySecurity);
public System.Reflection.Assembly Load (string assemblyString, System.Security.Policy.Evidence assemblySecurity);
[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 http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
public System.Reflection.Assembly Load (string assemblyString, System.Security.Policy.Evidence assemblySecurity);
abstract member Load : string * System.Security.Policy.Evidence -> System.Reflection.Assembly
override this.Load : string * System.Security.Policy.Evidence -> System.Reflection.Assembly
[<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 http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")>]
abstract member Load : string * System.Security.Policy.Evidence -> System.Reflection.Assembly
override this.Load : string * System.Security.Policy.Evidence -> System.Reflection.Assembly
Public Function Load (assemblyString As String, assemblySecurity As Evidence) As Assembly
Parameter
- assemblySecurity
- Evidence
Beweis für das Laden der Assembly.
Gibt zurück
Die geladene Assembly.
Implementiert
- Attribute
Ausnahmen
assemblyString
ist gleich null
.
assemblyString
wurde nicht gefunden.
assemblyString
ist keine gültige Assembly für die derzeit geladene Runtime.
Der Vorgang wird für eine entladene Anwendungsdomäne ausgeführt.
Eine Assembly oder ein Modul wurde zweimal mit zwei unterschiedlichen Beweisen geladen.
Hinweise
Informationen, die allen Überladungen dieser Methode gemeinsam sind, finden Sie in der Load(AssemblyName) Methodenüberladung.
Gilt für:
Load(Byte[], Byte[], Evidence)
Achtung
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 http://go.microsoft.com/fwlink/?LinkId=155570 for more information.
public:
virtual System::Reflection::Assembly ^ Load(cli::array <System::Byte> ^ rawAssembly, cli::array <System::Byte> ^ rawSymbolStore, System::Security::Policy::Evidence ^ securityEvidence);
public System.Reflection.Assembly Load (byte[] rawAssembly, byte[] rawSymbolStore, System.Security.Policy.Evidence securityEvidence);
[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 http://go.microsoft.com/fwlink/?LinkId=155570 for more information.")]
public System.Reflection.Assembly Load (byte[] rawAssembly, byte[] rawSymbolStore, System.Security.Policy.Evidence securityEvidence);
abstract member Load : byte[] * byte[] * System.Security.Policy.Evidence -> System.Reflection.Assembly
override this.Load : byte[] * byte[] * System.Security.Policy.Evidence -> System.Reflection.Assembly
[<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 http://go.microsoft.com/fwlink/?LinkId=155570 for more information.")>]
abstract member Load : byte[] * byte[] * System.Security.Policy.Evidence -> System.Reflection.Assembly
override 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.
- rawSymbolStore
- Byte[]
Ein Array vom Typ byte
, das die Rohdatenbytes enthält, die die Symbole für die Assembly darstellen.
- securityEvidence
- Evidence
Beweis für das Laden der Assembly.
Gibt zurück
Die geladene Assembly.
Implementiert
- Attribute
Ausnahmen
rawAssembly
ist null
.
rawAssembly
ist keine gültige Assembly für die derzeit geladene Runtime.
Der Vorgang wird für eine entladene Anwendungsdomäne ausgeführt.
Eine Assembly oder ein Modul wurde zweimal mit zwei unterschiedlichen Beweisen geladen.
securityEvidence
ist nicht null
. Wenn die Legacy-CAS-Richtlinie nicht aktiviert ist, sollte securityEvidence
dem Wert null
entsprechen.
Beispiele
Im folgenden Beispiel wird die Verwendung des Ladens einer Rohassembly veranschaulicht.
Damit dieses Codebeispiel ausgeführt werden kann, müssen Sie den vollqualifizierten Assemblynamen angeben. Informationen zum Abrufen des vollqualifizierten Assemblynamens finden Sie unter Assemblynamen.
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 LoadRawSnippet {
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");
}
}
open System
open System.IO
open System.Reflection
open System.Reflection.Emit
let instantiateMyType (domain: AppDomain) =
try
// You must supply a valid fully qualified assembly name here.
domain.CreateInstance("Assembly text name, Version, Culture, PublicKeyToken", "MyType")
|> ignore
with e ->
printfn $"{e.Message}"
// Loads the content of a file to a byte array.
let loadFile filename =
use fs = new FileStream(filename, FileMode.Open)
let buffer = Array.zeroCreate<byte> (int fs.Length)
fs.Read(buffer, 0, buffer.Length) |> ignore
fs.Close()
buffer
// Creates a dynamic assembly with symbol information
// and saves them to temp.dll and temp.pdb
let emitAssembly (domain: AppDomain) =
let assemblyName = AssemblyName()
assemblyName.Name <- "MyAssembly"
let assemblyBuilder = domain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Save)
let moduleBuilder = assemblyBuilder.DefineDynamicModule("MyModule", "temp.dll", true)
let typeBuilder = moduleBuilder.DefineType("MyType", TypeAttributes.Public)
let constructorBuilder = typeBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, null)
let ilGenerator = constructorBuilder.GetILGenerator()
ilGenerator.EmitWriteLine "MyType instantiated!"
ilGenerator.Emit OpCodes.Ret
typeBuilder.CreateType() |> ignore
assemblyBuilder.Save "temp.dll"
let myResolver (sender: obj) (args: ResolveEventArgs) =
let domain = sender :?> AppDomain
// Once the files are generated, this call is
// actually no longer necessary.
emitAssembly domain
let rawAssembly = loadFile "temp.dll"
let rawSymbolStore = loadFile "temp.pdb"
domain.Load(rawAssembly, rawSymbolStore)
let currentDomain = AppDomain.CurrentDomain
instantiateMyType currentDomain // Failed!
currentDomain.add_AssemblyResolve (ResolveEventHandler myResolver)
instantiateMyType currentDomain // OK!
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
Informationen, die allen Überladungen dieser Methode gemeinsam sind, finden Sie in der Load(AssemblyName) Methodenüberladung.
Ab dem .NET Framework 4 entspricht die Vertrauensebene einer Assembly, die mit dieser Methode geladen wird, der Vertrauensebene der Anwendungsdomäne.