AppDomain.Load AppDomain.Load AppDomain.Load AppDomain.Load Method

정의

Assembly를 이 용용 프로그램 도메인에 로드합니다.Loads an Assembly into this application domain.

오버로드

Load(Byte[]) Load(Byte[]) Load(Byte[]) Load(Byte[])

내보낸 Assembly가 들어 있는 COFF(Common Object File Format) 기반 이미지를 사용한 Assembly를 로드합니다.Loads the Assembly with a common object file format (COFF) based image containing an emitted Assembly.

Load(AssemblyName) Load(AssemblyName) Load(AssemblyName) Load(AssemblyName)

AssemblyName이 지정된 Assembly를 로드합니다.Loads an Assembly given its AssemblyName.

Load(String) Load(String) Load(String) Load(String)

표시 이름이 지정된 Assembly를 로드합니다.Loads an Assembly given its display name.

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

내보낸 Assembly가 들어 있는 COFF(Common Object File Format) 기반 이미지를 사용한 Assembly를 로드합니다.Loads the Assembly with a common object file format (COFF) based image containing an emitted Assembly. Assembly에 대한 기호를 나타내는 원시 바이트도 로드됩니다.The raw bytes representing the symbols for the Assembly are also loaded.

Load(AssemblyName, Evidence) Load(AssemblyName, Evidence) Load(AssemblyName, Evidence) Load(AssemblyName, Evidence)

AssemblyName이 지정된 Assembly를 로드합니다.Loads an Assembly given its AssemblyName.

Load(String, Evidence) Load(String, Evidence) Load(String, Evidence) Load(String, Evidence)

표시 이름이 지정된 Assembly를 로드합니다.Loads an Assembly given its display name.

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

내보낸 Assembly가 들어 있는 COFF(Common Object File Format) 기반 이미지를 사용한 Assembly를 로드합니다.Loads the Assembly with a common object file format (COFF) based image containing an emitted Assembly. Assembly에 대한 기호를 나타내는 원시 바이트도 로드됩니다.The raw bytes representing the symbols for the Assembly are also loaded.

Load(Byte[]) Load(Byte[]) Load(Byte[]) Load(Byte[])

내보낸 Assembly가 들어 있는 COFF(Common Object File Format) 기반 이미지를 사용한 Assembly를 로드합니다.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

매개 변수

rawAssembly
Byte[]

내보낸 어셈블리가 포함된 COFF 기반 이미지인 byte 형식의 배열입니다.An array of type byte that is a COFF-based image containing an emitted assembly.

반환

로드된 어셈블리입니다.The loaded assembly.

구현

예외

rawAssembly는 유효한 어셈블리가 아닙니다.rawAssembly is not a valid assembly.

또는-or- 버전 2.0 이상의 공용 언어 런타임이 현재 로드되어 있으며 rawAssembly이 이후 버전으로 컴파일되었습니다.Version 2.0 or later of the common language runtime is currently loaded and rawAssembly was compiled with a later version.

언로드된 애플리케이션 도메인에서 작업이 시도됩니다.The operation is attempted on an unloaded application domain.

어셈블리 또는 모듈이 서로 다른 두 증명 정보로 두 번 로드되었습니다.An assembly or module was loaded twice with two different evidences.

예제

다음 샘플 원시 어셈블리를 로드 하는 방법을 보여 줍니다.The following sample demonstrates the use of loading a raw assembly.

이 코드 예제를 실행 하려면 정규화 된 어셈블리 이름을 제공 해야 합니다.For this code example to run, you must provide the fully qualified assembly name. 참조 된 정규화 된 어셈블리 이름을 가져오는 방법에 대 한 내용은 어셈블리 이름합니다.For information about how to obtain the fully qualified assembly name, see Assembly Names.

using 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
Imports System.IO
Imports System.Reflection
Imports System.Reflection.Emit

Module Test
   
   Sub Main()
      Dim currentDomain As AppDomain = AppDomain.CurrentDomain
      
      InstantiateMyType(currentDomain)      ' Failed!

      AddHandler currentDomain.AssemblyResolve, AddressOf MyResolver
      
      InstantiateMyType(currentDomain)      ' OK!
   End Sub 'Main
   
   
   Sub InstantiateMyType(domain As AppDomain)
      Try
	 ' You must supply a valid fully qualified assembly name here.
         domain.CreateInstance("Assembly text name, Version, Culture, PublicKeyToken", "MyType")
      Catch e As Exception
         Console.WriteLine(e.Message)
      End Try
   End Sub 'InstantiateMyType
   
   
   ' Loads the content of a file to a byte array. 
   Function loadFile(filename As String) As Byte()
      Dim fs As New FileStream(filename, FileMode.Open)
      Dim buffer(CInt(fs.Length)) As Byte
      fs.Read(buffer, 0, buffer.Length)
      fs.Close()
      
      Return buffer
   End Function 'loadFile
   
   
   Function MyResolver(sender As Object, args As ResolveEventArgs) As System.Reflection.Assembly
      Dim domain As AppDomain = DirectCast(sender, AppDomain)
      
      ' Once the files are generated, this call is
      ' actually no longer necessary.
      EmitAssembly(domain)
      
      Dim rawAssembly As Byte() = loadFile("temp.dll")
      Dim rawSymbolStore As Byte() = loadFile("temp.pdb")
      Dim myAssembly As System.Reflection.Assembly = domain.Load(rawAssembly, rawSymbolStore)
      
      Return myAssembly
   End Function 'MyResolver
   
   
   ' Creates a dynamic assembly with symbol information
   ' and saves them to temp.dll and temp.pdb
   Sub EmitAssembly(domain As AppDomain)
      Dim assemblyName As New AssemblyName()
      assemblyName.Name = "MyAssembly"
      
      Dim assemblyBuilder As AssemblyBuilder = domain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Save)
      Dim moduleBuilder As ModuleBuilder = assemblyBuilder.DefineDynamicModule("MyModule", "temp.dll", True)
      Dim typeBuilder As TypeBuilder = moduleBuilder.DefineType("MyType", TypeAttributes.Public)
      
      Dim constructorBuilder As ConstructorBuilder = typeBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, Nothing)
      Dim ilGenerator As ILGenerator = constructorBuilder.GetILGenerator()
      ilGenerator.EmitWriteLine("MyType instantiated!")
      ilGenerator.Emit(OpCodes.Ret)
      
      typeBuilder.CreateType()
      
      assemblyBuilder.Save("temp.dll")
   End Sub 'EmitAssembly

End Module 'Test

설명

부터는 .NET Framework 4.NET Framework 4,이 메서드를 사용 하 여 로드 된 어셈블리의 신뢰 수준을 애플리케이션 도메인의 신뢰 수준으로 동일 합니다.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.

현재 애플리케이션 도메인에 어셈블리를 로드에이 메서드를 사용 해야 합니다.This method should be used only to load an assembly into the current application domain. 이 메서드는 정적을 호출할 수 없습니다는 상호 운용성 호출자에 대 한 편의 기능으로 제공 됩니다 Assembly.Load 메서드.This method is provided as a convenience for interoperability callers who cannot call the static Assembly.Load method. 다른 애플리케이션 도메인에 어셈블리 로드를 사용 하 여 메서드 같은 CreateInstanceAndUnwrap합니다.To load assemblies into other application domains, use a method such as CreateInstanceAndUnwrap.

이 메서드의 모든 오버 로드에 공통 된 정보에 대 한 참조를 Load(AssemblyName) 메서드 오버 로드 합니다.For information that is common to all overloads of this method, see the Load(AssemblyName) method overload.

보안

FileIOPermission
파일이 나 디렉터리에서 읽고 경로 자체의 정보에 대 한 액세스에 액세스 합니다.for access to read from a file or directory, and for access to the information in the path itself. 연관 된 열거형: Read, PathDiscovery합니다.Associated enumerations: Read, PathDiscovery.

Load(AssemblyName) Load(AssemblyName) Load(AssemblyName) Load(AssemblyName)

AssemblyName이 지정된 Assembly를 로드합니다.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

매개 변수

assemblyRef
AssemblyName AssemblyName AssemblyName AssemblyName

로드할 어셈블리를 설명하는 개체입니다.An object that describes the assembly to load.

반환

로드된 어셈블리입니다.The loaded assembly.

구현

예외

assemblyRef가 없는 경우assemblyRef is not found.

assemblyRef는 유효한 어셈블리가 아닙니다.assemblyRef is not a valid assembly.

또는-or- 버전 2.0 이상의 공용 언어 런타임이 현재 로드되어 있으며 assemblyRef이 이후 버전으로 컴파일되었습니다.Version 2.0 or later of the common language runtime is currently loaded and assemblyRef was compiled with a later version.

언로드된 애플리케이션 도메인에서 작업이 시도됩니다.The operation is attempted on an unloaded application domain.

어셈블리 또는 모듈이 서로 다른 두 증명 정보로 두 번 로드되었습니다.An assembly or module was loaded twice with two different evidences.

설명

현재 애플리케이션 도메인에 어셈블리를 로드에이 메서드를 사용 해야 합니다.This method should be used only to load an assembly into the current application domain. 이 메서드는 정적을 호출할 수 없습니다는 상호 운용성 호출자에 대 한 편의 기능으로 제공 됩니다 Assembly.Load 메서드.This method is provided as a convenience for interoperability callers who cannot call the static Assembly.Load method. 다른 애플리케이션 도메인에 어셈블리 로드를 사용 하 여 메서드 같은 CreateInstanceAndUnwrap합니다.To load assemblies into other application domains, use a method such as CreateInstanceAndUnwrap.

요청된 된 어셈블리의 버전을 이미 로드 되 면이 메서드는 서로 다른 버전이 필요한 경우에 로드 된 어셈블리를 반환 합니다.If a version of the requested assembly is already loaded, this method returns the loaded assembly, even if a different version is requested.

부분 어셈블리 이름을 제공 assemblyRef 권장 되지 않습니다.Supplying a partial assembly name for assemblyRef is not recommended. (이름의 일부를 하나 이상의 culture, 버전 또는 공개 키 토큰을 생략 하는 데 사용 합니다.(A partial name omits one or more of culture, version, or public key token. 대신 문자열을 사용 하는 오버 로드에 대 한는 AssemblyName 개체 "MyAssembly, 버전 1.0.0.0 =" 이름의 일부 예가 및 "MyAssembly, 버전 1.0.0.0, Culture = neutral, PublicKeyToken = 18ab3442da84b47 ="은 예 전체 이름입니다.) 부분 이름을 사용 하 여 성능에 부정적인 영향을 있습니다.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. 또한 부분 어셈블리 이름을 로드할 수 어셈블리를 전역 어셈블리 캐시에서 응용 프로그램 기본 디렉터리에 있는 어셈블리의 정확한 복사본을 필요한 경우에 (BaseDirectory 또는 AppDomainSetup.ApplicationBase).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).

경우 현재 AppDomain 개체는 애플리케이션 도메인을 나타내면 A, 및 Load 메서드는 애플리케이션 도메인에서 B, 어셈블리 두 애플리케이션 도메인에 로드 됩니다.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. 예를 들어, 다음 코드 부하 MyAssembly 새 애플리케이션 도메인에 ChildDomain 는 코드가 실행 되는 애플리케이션 도메인으로도: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")

때문에 어셈블리 두 도메인에 로드 됩니다 Assembly 에서 파생 되지 않습니다 MarshalByRefObject, 따라서의 반환 값과는 Load 메서드 마샬링될 수 없습니다.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. 대신, 공용 언어 런타임에서 어셈블리를 호출 하는 애플리케이션 도메인이 로드 하려고 시도 합니다.Instead, the common language runtime tries to load the assembly into the calling application domain. 두 애플리케이션 도메인에 로드 되는 어셈블리는 두 애플리케이션 도메인에 대 한 경로 설정이 다른 경우 달라질 수 있습니다.The assemblies that are loaded into the two application domains might be different if the path settings for the two application domains are different.

참고

모두를 AssemblyName.Name 속성 및 AssemblyName.CodeBase 어셈블리를 로드 하려는 첫 번째 시도에서는 표시 이름으로 속성 설정 (반환한 버전, 문화권 및 등을 포함 하 여는 Assembly.FullName 속성).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). 파일이 없는 경우는 CodeBase 속성 어셈블리를 검색 하는 데 사용 됩니다.If the file is not found, the CodeBase property is used to search for the assembly. 사용 하 여 어셈블리 있으면 CodeBase, 표시 이름을 어셈블리에 대해 일치 합니다.If the assembly is found using CodeBase, the display name is matched against the assembly. 검색이 실패 하는 경우는 FileLoadException throw 됩니다.If the match fails, a FileLoadException is thrown.

보안

FileIOPermission
파일이 나 디렉터리에서 읽고 경로 자체의 정보에 대 한 액세스에 액세스 합니다.for access to read from a file or directory, and for access to the information in the path itself. 연관 된 열거형: Read, PathDiscovery합니다.Associated enumerations: Read, PathDiscovery.

Load(String) Load(String) Load(String) Load(String)

표시 이름이 지정된 Assembly를 로드합니다.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

매개 변수

assemblyString
String String String String

어셈블리의 표시 이름입니다.The display name of the assembly. FullName을 참조하세요.See FullName.

반환

로드된 어셈블리입니다.The loaded assembly.

구현

예외

assemblyStringnull인 경우assemblyString is null

assemblyString가 없는 경우assemblyString is not found.

assemblyString는 유효한 어셈블리가 아닙니다.assemblyString is not a valid assembly.

또는-or- 버전 2.0 이상의 공용 언어 런타임이 현재 로드되어 있으며 assemblyString이 이후 버전으로 컴파일되었습니다.Version 2.0 or later of the common language runtime is currently loaded and assemblyString was compiled with a later version.

언로드된 애플리케이션 도메인에서 작업이 시도됩니다.The operation is attempted on an unloaded application domain.

어셈블리 또는 모듈이 서로 다른 두 증명 정보로 두 번 로드되었습니다.An assembly or module was loaded twice with two different evidences.

설명

현재 애플리케이션 도메인에 어셈블리를 로드에이 메서드를 사용 해야 합니다.This method should be used only to load an assembly into the current application domain. 이 메서드는 정적을 호출할 수 없습니다는 상호 운용성 호출자에 대 한 편의 기능으로 제공 됩니다 Assembly.Load 메서드.This method is provided as a convenience for interoperability callers who cannot call the static Assembly.Load method. 다른 애플리케이션 도메인에 어셈블리 로드를 사용 하 여 메서드 같은 CreateInstanceAndUnwrap합니다.To load assemblies into other application domains, use a method such as CreateInstanceAndUnwrap.

이 메서드의 모든 오버 로드에 공통 된 정보에 대 한 참조를 Load(AssemblyName) 메서드 오버 로드 합니다.For information that is common to all overloads of this method, see the Load(AssemblyName) method overload.

보안

FileIOPermission
파일이 나 디렉터리에서 읽고 경로 자체의 정보에 대 한 액세스에 액세스 합니다.for access to read from a file or directory, and for access to the information in the path itself. 연관 된 열거형: Read, PathDiscovery합니다.Associated enumerations: Read, PathDiscovery.

WebPermission
어셈블리를 로컬이 아닌 경우 어셈블리의 위치에 액세스할 수 있습니다.for the ability to access the location of the assembly if the assembly is not local.

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

내보낸 Assembly가 들어 있는 COFF(Common Object File Format) 기반 이미지를 사용한 Assembly를 로드합니다.Loads the Assembly with a common object file format (COFF) based image containing an emitted Assembly. Assembly에 대한 기호를 나타내는 원시 바이트도 로드됩니다.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

매개 변수

rawAssembly
Byte[]

내보낸 어셈블리가 포함된 COFF 기반 이미지인 byte 형식의 배열입니다.An array of type byte that is a COFF-based image containing an emitted assembly.

rawSymbolStore
Byte[]

어셈블리의 기호를 나타내는 원시 바이트가 포함된 byte 형식의 배열입니다.An array of type byte containing the raw bytes representing the symbols for the assembly.

반환

로드된 어셈블리입니다.The loaded assembly.

구현

예외

rawAssembly는 유효한 어셈블리가 아닙니다.rawAssembly is not a valid assembly.

또는-or- 버전 2.0 이상의 공용 언어 런타임이 현재 로드되어 있으며 rawAssembly이 이후 버전으로 컴파일되었습니다.Version 2.0 or later of the common language runtime is currently loaded and rawAssembly was compiled with a later version.

언로드된 애플리케이션 도메인에서 작업이 시도됩니다.The operation is attempted on an unloaded application domain.

어셈블리 또는 모듈이 서로 다른 두 증명 정보로 두 번 로드되었습니다.An assembly or module was loaded twice with two different evidences.

예제

다음 샘플 원시 어셈블리를 로드 하는 방법을 보여 줍니다.The following sample demonstrates the use of loading a raw assembly.

이 코드 예제를 실행 하려면 정규화 된 어셈블리 이름을 제공 해야 합니다.For this code example to run, you must provide the fully qualified assembly name. 참조 된 정규화 된 어셈블리 이름을 가져오는 방법에 대 한 내용은 어셈블리 이름합니다.For information about how to obtain the fully qualified assembly name, see Assembly Names.

using 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
Imports System.IO
Imports System.Reflection
Imports System.Reflection.Emit

Module Test
   
   Sub Main()
      Dim currentDomain As AppDomain = AppDomain.CurrentDomain
      
      InstantiateMyType(currentDomain)      ' Failed!

      AddHandler currentDomain.AssemblyResolve, AddressOf MyResolver
      
      InstantiateMyType(currentDomain)      ' OK!
   End Sub 'Main
   
   
   Sub InstantiateMyType(domain As AppDomain)
      Try
	 ' You must supply a valid fully qualified assembly name here.
         domain.CreateInstance("Assembly text name, Version, Culture, PublicKeyToken", "MyType")
      Catch e As Exception
         Console.WriteLine(e.Message)
      End Try
   End Sub 'InstantiateMyType
   
   
   ' Loads the content of a file to a byte array. 
   Function loadFile(filename As String) As Byte()
      Dim fs As New FileStream(filename, FileMode.Open)
      Dim buffer(CInt(fs.Length)) As Byte
      fs.Read(buffer, 0, buffer.Length)
      fs.Close()
      
      Return buffer
   End Function 'loadFile
   
   
   Function MyResolver(sender As Object, args As ResolveEventArgs) As System.Reflection.Assembly
      Dim domain As AppDomain = DirectCast(sender, AppDomain)
      
      ' Once the files are generated, this call is
      ' actually no longer necessary.
      EmitAssembly(domain)
      
      Dim rawAssembly As Byte() = loadFile("temp.dll")
      Dim rawSymbolStore As Byte() = loadFile("temp.pdb")
      Dim myAssembly As System.Reflection.Assembly = domain.Load(rawAssembly, rawSymbolStore)
      
      Return myAssembly
   End Function 'MyResolver
   
   
   ' Creates a dynamic assembly with symbol information
   ' and saves them to temp.dll and temp.pdb
   Sub EmitAssembly(domain As AppDomain)
      Dim assemblyName As New AssemblyName()
      assemblyName.Name = "MyAssembly"
      
      Dim assemblyBuilder As AssemblyBuilder = domain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Save)
      Dim moduleBuilder As ModuleBuilder = assemblyBuilder.DefineDynamicModule("MyModule", "temp.dll", True)
      Dim typeBuilder As TypeBuilder = moduleBuilder.DefineType("MyType", TypeAttributes.Public)
      
      Dim constructorBuilder As ConstructorBuilder = typeBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, Nothing)
      Dim ilGenerator As ILGenerator = constructorBuilder.GetILGenerator()
      ilGenerator.EmitWriteLine("MyType instantiated!")
      ilGenerator.Emit(OpCodes.Ret)
      
      typeBuilder.CreateType()
      
      assemblyBuilder.Save("temp.dll")
   End Sub 'EmitAssembly

End Module 'Test

설명

부터는 .NET Framework 4.NET Framework 4,이 메서드를 사용 하 여 로드 된 어셈블리의 신뢰 수준을 애플리케이션 도메인의 신뢰 수준으로 동일 합니다.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.

현재 애플리케이션 도메인에 어셈블리를 로드에이 메서드를 사용 해야 합니다.This method should be used only to load an assembly into the current application domain. 이 메서드는 정적을 호출할 수 없습니다는 상호 운용성 호출자에 대 한 편의 기능으로 제공 됩니다 Assembly.Load 메서드.This method is provided as a convenience for interoperability callers who cannot call the static Assembly.Load method. 다른 애플리케이션 도메인에 어셈블리 로드를 사용 하 여 메서드 같은 CreateInstanceAndUnwrap합니다.To load assemblies into other application domains, use a method such as CreateInstanceAndUnwrap.

이 메서드의 모든 오버 로드에 공통 된 정보에 대 한 참조를 Load(AssemblyName) 메서드 오버 로드 합니다.For information that is common to all overloads of this method, see the Load(AssemblyName) method overload.

보안

WebPermission
"file://"로 시작 하지 않는 URI를 읽는 합니다.for reading a URI that does not begin with "file://".

FileIOPermission
파일이 나 디렉터리에서 읽고 경로 자체의 정보에 대 한 액세스에 액세스 합니다.for access to read from a file or directory, and for access to the information in the path itself. 연관 된 열거형: Read, PathDiscovery합니다.Associated enumerations: Read, PathDiscovery.

Load(AssemblyName, Evidence) Load(AssemblyName, Evidence) Load(AssemblyName, Evidence) Load(AssemblyName, Evidence)

경고

이 API는 현재 사용되지 않습니다.

AssemblyName이 지정된 Assembly를 로드합니다.Loads an Assembly given its AssemblyName.

public:
 virtual 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 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
Public Function Load (assemblyRef As AssemblyName, assemblySecurity As Evidence) As Assembly

매개 변수

assemblyRef
AssemblyName AssemblyName AssemblyName AssemblyName

로드할 어셈블리를 설명하는 개체입니다.An object that describes the assembly to load.

assemblySecurity
Evidence Evidence Evidence Evidence

어셈블리 로드에 사용할 증명 정보입니다.Evidence for loading the assembly.

반환

로드된 어셈블리입니다.The loaded assembly.

구현

예외

assemblyRef가 없는 경우assemblyRef is not found.

assemblyRef는 유효한 어셈블리가 아닙니다.assemblyRef is not a valid assembly.

또는-or- 버전 2.0 이상의 공용 언어 런타임이 현재 로드되어 있으며 assemblyRef이 이후 버전으로 컴파일되었습니다.Version 2.0 or later of the common language runtime is currently loaded and assemblyRef was compiled with a later version.

언로드된 애플리케이션 도메인에서 작업이 시도됩니다.The operation is attempted on an unloaded application domain.

어셈블리 또는 모듈이 서로 다른 두 증명 정보로 두 번 로드되었습니다.An assembly or module was loaded twice with two different evidences.

설명

현재 애플리케이션 도메인에 어셈블리를 로드에이 메서드를 사용 해야 합니다.This method should be used only to load an assembly into the current application domain. 이 메서드는 정적을 호출할 수 없습니다는 상호 운용성 호출자에 대 한 편의 기능으로 제공 됩니다 Assembly.Load 메서드.This method is provided as a convenience for interoperability callers who cannot call the static Assembly.Load method. 다른 애플리케이션 도메인에 어셈블리 로드를 사용 하 여 메서드 같은 CreateInstanceAndUnwrap합니다.To load assemblies into other application domains, use a method such as CreateInstanceAndUnwrap.

이 메서드의 모든 오버 로드에 공통 된 정보에 대 한 참조를 Load(AssemblyName) 메서드 오버 로드 합니다.For information that is common to all overloads of this method, see the Load(AssemblyName) method overload.

보안

FileIOPermission
파일이 나 디렉터리에서 읽고 경로 자체의 정보에 대 한 액세스에 액세스 합니다.for access to read from a file or directory, and for access to the information in the path itself. 연관 된 열거형: Read, PathDiscovery합니다.Associated enumerations: Read, PathDiscovery.

SecurityPermission
증명 정보를 사용 하 여 어셈블리를 로드 합니다.to load an assembly with evidence. 연관된 열거형: ControlEvidenceAssociated enumeration: ControlEvidence.

WebPermission
"file://" 폼에 없는 경로 읽기 위한 또는 "\\\UNC\dir\\" 또는 "c:\\"입니다.for reading a path that is not in the form "file://" or "\\\UNC\dir\\" or "c:\\".

Load(String, Evidence) Load(String, Evidence) Load(String, Evidence) Load(String, Evidence)

경고

이 API는 현재 사용되지 않습니다.

표시 이름이 지정된 Assembly를 로드합니다.Loads an Assembly given its display name.

public:
 virtual 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 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
Public Function Load (assemblyString As String, assemblySecurity As Evidence) As Assembly

매개 변수

assemblyString
String String String String

어셈블리의 표시 이름입니다.The display name of the assembly. FullName을 참조하세요.See FullName.

assemblySecurity
Evidence Evidence Evidence Evidence

어셈블리 로드에 사용할 증명 정보입니다.Evidence for loading the assembly.

반환

로드된 어셈블리입니다.The loaded assembly.

구현

예외

assemblyStringnull인 경우assemblyString is null

assemblyString가 없는 경우assemblyString is not found.

assemblyString는 유효한 어셈블리가 아닙니다.assemblyString is not a valid assembly.

또는-or- 버전 2.0 이상의 공용 언어 런타임이 현재 로드되어 있으며 assemblyString이 이후 버전으로 컴파일되었습니다.Version 2.0 or later of the common language runtime is currently loaded and assemblyString was compiled with a later version.

언로드된 애플리케이션 도메인에서 작업이 시도됩니다.The operation is attempted on an unloaded application domain.

어셈블리 또는 모듈이 서로 다른 두 증명 정보로 두 번 로드되었습니다.An assembly or module was loaded twice with two different evidences.

설명

현재 애플리케이션 도메인에 어셈블리를 로드에이 메서드를 사용 해야 합니다.This method should be used only to load an assembly into the current application domain. 이 메서드는 정적을 호출할 수 없습니다는 상호 운용성 호출자에 대 한 편의 기능으로 제공 됩니다 Assembly.Load 메서드.This method is provided as a convenience for interoperability callers who cannot call the static Assembly.Load method. 다른 애플리케이션 도메인에 어셈블리 로드를 사용 하 여 메서드 같은 CreateInstanceAndUnwrap합니다.To load assemblies into other application domains, use a method such as CreateInstanceAndUnwrap.

이 메서드의 모든 오버 로드에 공통 된 정보에 대 한 참조를 Load(AssemblyName) 메서드 오버 로드 합니다.For information that is common to all overloads of this method, see the Load(AssemblyName) method overload.

보안

SecurityPermission
증명 정보를 사용 하 여 어셈블리를 로드 합니다.to load an assembly with evidence. 연관된 열거형: ControlEvidenceAssociated enumeration: ControlEvidence.

FileIOPermission
파일이 나 디렉터리에서 읽고 경로 자체의 정보에 대 한 액세스에 액세스 합니다.for access to read from a file or directory, and for access to the information in the path itself. 연관 된 열거형: Read, PathDiscovery합니다.Associated enumerations: Read, PathDiscovery.

WebPermission
"file://" 폼에 없는 경로 읽기 위한 또는 "\\\UNC\dir\\" 또는 "c:\\"입니다.for reading a path that is not in the form "file://" or "\\\UNC\dir\\" or "c:\\".

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

경고

이 API는 현재 사용되지 않습니다.

내보낸 Assembly가 들어 있는 COFF(Common Object File Format) 기반 이미지를 사용한 Assembly를 로드합니다.Loads the Assembly with a common object file format (COFF) based image containing an emitted Assembly. Assembly에 대한 기호를 나타내는 원시 바이트도 로드됩니다.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, 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 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
Public Function Load (rawAssembly As Byte(), rawSymbolStore As Byte(), securityEvidence As Evidence) As Assembly

매개 변수

rawAssembly
Byte[]

내보낸 어셈블리가 포함된 COFF 기반 이미지인 byte 형식의 배열입니다.An array of type byte that is a COFF-based image containing an emitted assembly.

rawSymbolStore
Byte[]

어셈블리의 기호를 나타내는 원시 바이트가 포함된 byte 형식의 배열입니다.An array of type byte containing the raw bytes representing the symbols for the assembly.

securityEvidence
Evidence Evidence Evidence Evidence

어셈블리 로드에 사용할 증명 정보입니다.Evidence for loading the assembly.

반환

로드된 어셈블리입니다.The loaded assembly.

구현

예외

rawAssembly는 유효한 어셈블리가 아닙니다.rawAssembly is not a valid assembly.

또는-or- 버전 2.0 이상의 공용 언어 런타임이 현재 로드되어 있으며 rawAssembly이 이후 버전으로 컴파일되었습니다.Version 2.0 or later of the common language runtime is currently loaded and rawAssembly was compiled with a later version.

언로드된 애플리케이션 도메인에서 작업이 시도됩니다.The operation is attempted on an unloaded application domain.

어셈블리 또는 모듈이 서로 다른 두 증명 정보로 두 번 로드되었습니다.An assembly or module was loaded twice with two different evidences.

securityEvidencenull가 아닙니다.securityEvidence is not null. 레거시 CAS 정책을 사용하지 않을 때는 securityEvidencenull이 되어야 합니다.When legacy CAS policy is not enabled, securityEvidence should be null.

예제

다음 샘플 원시 어셈블리를 로드 하는 방법을 보여 줍니다.The following sample demonstrates the use of loading a raw assembly.

이 코드 예제를 실행 하려면 정규화 된 어셈블리 이름을 제공 해야 합니다.For this code example to run, you must provide the fully qualified assembly name. 참조 된 정규화 된 어셈블리 이름을 가져오는 방법에 대 한 내용은 어셈블리 이름합니다.For information about how to obtain the fully qualified assembly name, see Assembly Names.

using 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
Imports System.IO
Imports System.Reflection
Imports System.Reflection.Emit

Module Test
   
   Sub Main()
      Dim currentDomain As AppDomain = AppDomain.CurrentDomain
      
      InstantiateMyType(currentDomain)      ' Failed!

      AddHandler currentDomain.AssemblyResolve, AddressOf MyResolver
      
      InstantiateMyType(currentDomain)      ' OK!
   End Sub 'Main
   
   
   Sub InstantiateMyType(domain As AppDomain)
      Try
	 ' You must supply a valid fully qualified assembly name here.
         domain.CreateInstance("Assembly text name, Version, Culture, PublicKeyToken", "MyType")
      Catch e As Exception
         Console.WriteLine(e.Message)
      End Try
   End Sub 'InstantiateMyType
   
   
   ' Loads the content of a file to a byte array. 
   Function loadFile(filename As String) As Byte()
      Dim fs As New FileStream(filename, FileMode.Open)
      Dim buffer(CInt(fs.Length)) As Byte
      fs.Read(buffer, 0, buffer.Length)
      fs.Close()
      
      Return buffer
   End Function 'loadFile
   
   
   Function MyResolver(sender As Object, args As ResolveEventArgs) As System.Reflection.Assembly
      Dim domain As AppDomain = DirectCast(sender, AppDomain)
      
      ' Once the files are generated, this call is
      ' actually no longer necessary.
      EmitAssembly(domain)
      
      Dim rawAssembly As Byte() = loadFile("temp.dll")
      Dim rawSymbolStore As Byte() = loadFile("temp.pdb")
      Dim myAssembly As System.Reflection.Assembly = domain.Load(rawAssembly, rawSymbolStore)
      
      Return myAssembly
   End Function 'MyResolver
   
   
   ' Creates a dynamic assembly with symbol information
   ' and saves them to temp.dll and temp.pdb
   Sub EmitAssembly(domain As AppDomain)
      Dim assemblyName As New AssemblyName()
      assemblyName.Name = "MyAssembly"
      
      Dim assemblyBuilder As AssemblyBuilder = domain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Save)
      Dim moduleBuilder As ModuleBuilder = assemblyBuilder.DefineDynamicModule("MyModule", "temp.dll", True)
      Dim typeBuilder As TypeBuilder = moduleBuilder.DefineType("MyType", TypeAttributes.Public)
      
      Dim constructorBuilder As ConstructorBuilder = typeBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, Nothing)
      Dim ilGenerator As ILGenerator = constructorBuilder.GetILGenerator()
      ilGenerator.EmitWriteLine("MyType instantiated!")
      ilGenerator.Emit(OpCodes.Ret)
      
      typeBuilder.CreateType()
      
      assemblyBuilder.Save("temp.dll")
   End Sub 'EmitAssembly

End Module 'Test

설명

부터는 .NET Framework 4.NET Framework 4,이 메서드를 사용 하 여 로드 된 어셈블리의 신뢰 수준을 애플리케이션 도메인의 신뢰 수준으로 동일 합니다.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.

현재 애플리케이션 도메인에 어셈블리를 로드에이 메서드를 사용 해야 합니다.This method should be used only to load an assembly into the current application domain. 이 메서드는 정적을 호출할 수 없습니다는 상호 운용성 호출자에 대 한 편의 기능으로 제공 됩니다 Assembly.Load 메서드.This method is provided as a convenience for interoperability callers who cannot call the static Assembly.Load method. 다른 애플리케이션 도메인에 어셈블리 로드를 사용 하 여 메서드 같은 CreateInstanceAndUnwrap합니다.To load assemblies into other application domains, use a method such as CreateInstanceAndUnwrap.

이 메서드의 모든 오버 로드에 공통 된 정보에 대 한 참조를 Load(AssemblyName) 메서드 오버 로드 합니다.For information that is common to all overloads of this method, see the Load(AssemblyName) method overload.

보안

SecurityPermission
증명 정보를 제공 합니다.to provide evidence. 연관된 열거형: ControlEvidenceAssociated enumeration: ControlEvidence. 보안 동작: Demand합니다.Security action: Demand.

FileIOPermission
파일이 나 디렉터리에서 읽고 경로 자체의 정보에 대 한 액세스에 액세스 합니다.for access to read from a file or directory, and for access to the information in the path itself. 연관 된 열거형: Read, PathDiscovery합니다.Associated enumerations: Read, PathDiscovery.

WebPermission
"file://" 폼에 없는 경로 읽기 위한 또는 "\\\UNC\dir\\" 또는 "c:\\"입니다.for reading a path that is not in the form "file://" or "\\\UNC\dir\\" or "c:\\".

적용 대상