AppDomain.Load 메서드
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
Assembly를 이 용용 프로그램 도메인에 로드합니다.
오버로드
Load(Byte[]) |
내보낸 Assembly가 들어 있는 COFF(Common Object File Format) 기반 이미지를 사용한 Assembly를 로드합니다. |
Load(AssemblyName) |
AssemblyName이 지정된 Assembly를 로드합니다. |
Load(String) |
표시 이름이 지정된 Assembly를 로드합니다. |
Load(Byte[], Byte[]) |
내보낸 Assembly가 들어 있는 COFF(Common Object File Format) 기반 이미지를 사용한 Assembly를 로드합니다. Assembly에 대한 기호를 나타내는 원시 바이트도 로드됩니다. |
Load(AssemblyName, Evidence) |
사용되지 않음.
AssemblyName이 지정된 Assembly를 로드합니다. |
Load(String, Evidence) |
사용되지 않음.
표시 이름이 지정된 Assembly를 로드합니다. |
Load(Byte[], Byte[], Evidence) |
사용되지 않음.
내보낸 Assembly가 들어 있는 COFF(Common Object File Format) 기반 이미지를 사용한 Assembly를 로드합니다. Assembly에 대한 기호를 나타내는 원시 바이트도 로드됩니다. |
Load(Byte[])
- Source:
- AppDomain.cs
- Source:
- AppDomain.cs
- Source:
- 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
매개 변수
- rawAssembly
- Byte[]
내보낸 어셈블리가 포함된 COFF 기반 이미지인 byte
형식의 배열입니다.
반환
로드된 어셈블리입니다.
구현
예외
rawAssembly
이(가) null
인 경우
rawAssembly
는 현재 로드된 런타임에 유효한 어셈블리가 아닙니다.
언로드된 애플리케이션 도메인에서 작업이 시도됩니다.
어셈블리 또는 모듈이 서로 다른 두 증명 정보로 두 번 로드되었습니다.
예제
다음 샘플에서는 원시 어셈블리를 로드하는 방법을 보여 줍니다.
이 코드 예제를 실행 하려면 정규화 된 어셈블리 이름을 제공 해야 합니다. 참조 된 정규화 된 어셈블리 이름을 가져오는 방법에 대 한 내용은 어셈블리 이름합니다.
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
설명
이 메서드의 모든 오버로드에 공통적인 정보는 메서드 오버로드를 Load(AssemblyName) 참조하세요.
.NET Framework 4부터 이 메서드를 사용하여 로드되는 어셈블리의 신뢰 수준은 애플리케이션 도메인의 신뢰 수준과 동일합니다.
적용 대상
Load(AssemblyName)
- Source:
- AppDomain.cs
- Source:
- AppDomain.cs
- Source:
- AppDomain.cs
AssemblyName이 지정된 Assembly를 로드합니다.
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
매개 변수
- assemblyRef
- AssemblyName
로드할 어셈블리를 설명하는 개체입니다.
반환
로드된 어셈블리입니다.
구현
예외
assemblyRef
이(가) null
인 경우
assemblyRef
가 없는 경우
assemblyRef
는 현재 로드된 런타임에 유효한 어셈블리가 아닙니다.
언로드된 애플리케이션 도메인에서 작업이 시도됩니다.
어셈블리 또는 모듈이 서로 다른 두 증명 정보로 두 번 로드되었습니다.
설명
현재 애플리케이션 도메인에 어셈블리를 로드에이 메서드를 사용 해야 합니다. 이 메서드는 정적 Assembly.Load 메서드를 호출할 수 없는 상호 운용성 호출자의 편의를 위해 제공됩니다. 다른 애플리케이션 도메인에 어셈블리 로드를 사용 하 여 메서드 같은 CreateInstanceAndUnwrap합니다.
요청된 어셈블리의 버전이 이미 로드된 경우 다른 버전이 요청된 경우에도 이 메서드는 로드된 어셈블리를 반환합니다.
에 대한 assemblyRef
부분 어셈블리 이름을 제공하지 않는 것이 좋습니다. 부분 이름은 하나 이상의 문화권, 버전 또는 공개 키 토큰을 생략합니다. 개체 대신 문자열을 사용하는 오버로드의 AssemblyName 경우 "MyAssembly, Version=1.0.0.0"은 부분 이름의 예이며 "MyAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=18ab3442da84b47"은 전체 이름의 예입니다.) 부분 이름을 사용하면 성능에 부정적인 영향을 줍니다. 또한 부분 어셈블리 이름을 로드할 수 어셈블리를 전역 어셈블리 캐시에서 애플리케이션 기본 디렉터리에 있는 어셈블리의 정확한 복사본을 필요한 경우에 (BaseDirectory 또는 AppDomainSetup.ApplicationBase).
경우 현재 AppDomain 개체는 애플리케이션 도메인을 나타내면 A
, 및 Load 메서드는 애플리케이션 도메인에서 B
, 어셈블리 두 애플리케이션 도메인에 로드 됩니다. 예를 들어, 다음 코드 부하 MyAssembly
새 애플리케이션 도메인에 ChildDomain
는 코드가 실행 되는 애플리케이션 도메인으로도:
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")
어셈블리는 에서 MarshalByRefObject파생되지 않으므로 두 도메인 Assembly 에 로드되므로 메서드의 Load 반환 값을 마샬링할 수 없습니다. 대신, 공용 언어 런타임에서 어셈블리를 호출 하는 애플리케이션 도메인이 로드 하려고 시도 합니다. 두 애플리케이션 도메인에 로드 되는 어셈블리는 두 애플리케이션 도메인에 대 한 경로 설정이 다른 경우 달라질 수 있습니다.
참고
속성과 AssemblyName.CodeBase 속성이 모두 AssemblyName.Name 설정된 경우 어셈블리를 로드하려는 첫 번째 시도는 표시 이름(속성에서 반환된 버전, 문화권 등 포함)을 Assembly.FullName 사용합니다. 파일을 찾을 CodeBase 수 없으면 속성을 사용하여 어셈블리를 검색합니다. 를 사용하여 CodeBase어셈블리를 찾은 경우 표시 이름이 어셈블리와 일치합니다. 일치가 실패하면 가 FileLoadException throw됩니다.
적용 대상
Load(String)
- Source:
- AppDomain.cs
- Source:
- AppDomain.cs
- Source:
- AppDomain.cs
표시 이름이 지정된 Assembly를 로드합니다.
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
매개 변수
반환
로드된 어셈블리입니다.
구현
예외
assemblyString
가 null
인 경우
assemblyString
가 없는 경우
assemblyString
는 현재 로드된 런타임에 유효한 어셈블리가 아닙니다.
언로드된 애플리케이션 도메인에서 작업이 시도됩니다.
어셈블리 또는 모듈이 서로 다른 두 증명 정보로 두 번 로드되었습니다.
설명
이 메서드의 모든 오버로드에 공통적인 정보는 메서드 오버로드를 Load(AssemblyName) 참조하세요.
적용 대상
Load(Byte[], Byte[])
- Source:
- AppDomain.cs
- Source:
- AppDomain.cs
- Source:
- 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
매개 변수
- rawAssembly
- Byte[]
내보낸 어셈블리가 포함된 COFF 기반 이미지인 byte
형식의 배열입니다.
- rawSymbolStore
- Byte[]
어셈블리의 기호를 나타내는 원시 바이트가 포함된 byte
형식의 배열입니다.
반환
로드된 어셈블리입니다.
구현
예외
rawAssembly
이(가) null
인 경우
rawAssembly
는 현재 로드된 런타임에 유효한 어셈블리가 아닙니다.
언로드된 애플리케이션 도메인에서 작업이 시도됩니다.
어셈블리 또는 모듈이 서로 다른 두 증명 정보로 두 번 로드되었습니다.
예제
다음 샘플에서는 원시 어셈블리를 로드하는 방법을 보여 줍니다.
이 코드 예제를 실행 하려면 정규화 된 어셈블리 이름을 제공 해야 합니다. 참조 된 정규화 된 어셈블리 이름을 가져오는 방법에 대 한 내용은 어셈블리 이름합니다.
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
설명
이 메서드의 모든 오버로드에 공통적인 정보는 메서드 오버로드를 Load(AssemblyName) 참조하세요.
.NET Framework 4부터 이 메서드를 사용하여 로드되는 어셈블리의 신뢰 수준은 애플리케이션 도메인의 신뢰 수준과 동일합니다.
적용 대상
Load(AssemblyName, Evidence)
주의
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.
AssemblyName이 지정된 Assembly를 로드합니다.
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
매개 변수
- assemblyRef
- AssemblyName
로드할 어셈블리를 설명하는 개체입니다.
- assemblySecurity
- Evidence
어셈블리 로드에 사용할 증명 정보입니다.
반환
로드된 어셈블리입니다.
구현
- 특성
예외
assemblyRef
가 null
인 경우
assemblyRef
가 없는 경우
assemblyRef
는 현재 로드된 런타임에 유효한 어셈블리가 아닙니다.
언로드된 애플리케이션 도메인에서 작업이 시도됩니다.
어셈블리 또는 모듈이 서로 다른 두 증명 정보로 두 번 로드되었습니다.
설명
이 메서드의 모든 오버로드에 공통적인 정보는 메서드 오버로드를 Load(AssemblyName) 참조하세요.
적용 대상
Load(String, Evidence)
주의
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.
표시 이름이 지정된 Assembly를 로드합니다.
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
매개 변수
- assemblySecurity
- Evidence
어셈블리 로드에 사용할 증명 정보입니다.
반환
로드된 어셈블리입니다.
구현
- 특성
예외
assemblyString
가 null
인 경우
assemblyString
가 없는 경우
assemblyString
는 현재 로드된 런타임에 유효한 어셈블리가 아닙니다.
언로드된 애플리케이션 도메인에서 작업이 시도됩니다.
어셈블리 또는 모듈이 서로 다른 두 증명 정보로 두 번 로드되었습니다.
설명
이 메서드의 모든 오버로드에 공통적인 정보는 메서드 오버로드를 Load(AssemblyName) 참조하세요.
적용 대상
Load(Byte[], Byte[], Evidence)
주의
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
매개 변수
- rawAssembly
- Byte[]
내보낸 어셈블리가 포함된 COFF 기반 이미지인 byte
형식의 배열입니다.
- rawSymbolStore
- Byte[]
어셈블리의 기호를 나타내는 원시 바이트가 포함된 byte
형식의 배열입니다.
- securityEvidence
- Evidence
어셈블리 로드에 사용할 증명 정보입니다.
반환
로드된 어셈블리입니다.
구현
- 특성
예외
rawAssembly
이(가) null
인 경우
rawAssembly
는 현재 로드된 런타임에 유효한 어셈블리가 아닙니다.
언로드된 애플리케이션 도메인에서 작업이 시도됩니다.
어셈블리 또는 모듈이 서로 다른 두 증명 정보로 두 번 로드되었습니다.
securityEvidence
이 null
가 아닙니다. 레거시 CAS 정책을 사용하지 않을 때는 securityEvidence
는 null
이 되어야 합니다.
예제
다음 샘플에서는 원시 어셈블리를 로드하는 방법을 보여 줍니다.
이 코드 예제를 실행 하려면 정규화 된 어셈블리 이름을 제공 해야 합니다. 참조 된 정규화 된 어셈블리 이름을 가져오는 방법에 대 한 내용은 어셈블리 이름합니다.
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
설명
이 메서드의 모든 오버로드에 공통적인 정보는 메서드 오버로드를 Load(AssemblyName) 참조하세요.
.NET Framework 4부터 이 메서드를 사용하여 로드되는 어셈블리의 신뢰 수준은 애플리케이션 도메인의 신뢰 수준과 동일합니다.
적용 대상
.NET