다음을 통해 공유


방법: 응용 프로그램 도메인에 어셈블리 로드

업데이트: 2007년 11월

몇 가지 방법을 사용하여 어셈블리를 응용 프로그램 도메인에 로드할 수 있습니다. 권장되는 방법은 System.Reflection.Assembly 클래스의 static(Visual Basic의 경우 Shared) Load 메서드를 사용하는 것입니다. 그 밖에도 다음과 같은 방법으로 어셈블리를 로드할 수 있습니다.

  • Assembly 클래스의 LoadFrom 메서드로 지정된 파일 위치에서 어셈블리를 로드할 수 있습니다. 이 메서드로 어셈블리를 로드할 경우 다른 로드 컨텍스트가 사용됩니다.

  • ReflectionOnlyLoadReflectionOnlyLoadFrom 메서드로 리플렉션 전용 컨텍스트에 어셈블리를 로드할 수 있습니다. 이 컨텍스트에 로드된 어셈블리는 검사할 수 있지만 실행할 수는 없으므로 이 컨텍스트에서 다른 플랫폼을 대상으로 하는 어셈블리를 검사할 수 있습니다. 방법: 리플렉션 전용 컨텍스트에 어셈블리 로드를 참조하십시오.

참고:

리플렉션 전용 컨텍스트는 .NET Framework 버전 2.0에서 새로 도입되었습니다.

  • AppDomain 클래스의 CreateInstanceCreateInstanceAndUnwrap과 같은 메서드로 응용 프로그램 도메인에 어셈블리를 로드할 수 있습니다.

  • Type 클래스의 GetType 메서드로 어셈블리를 로드할 수 있습니다.

  • System.AppDomain 클래스의 Load 메서드로 어셈블리를 로드할 수 있지만 이 메서드는 주로 COM 상호 운용성에 사용됩니다. 어셈블리를 호출하는 응용 프로그램 도메인 이외의 다른 응용 프로그램 도메인에 어셈블리를 로드하는 데는 이 메서드를 사용하지 말아야 합니다.

참고:

.NET Framework 버전 2.0부터 현재 로드된 런타임보다 버전 번호가 높은 .NET Framework로 컴파일된 어셈블리는 런타임에서 로드되지 않습니다. 이는 주 버전 번호와 부 버전 번호의 조합에 해당됩니다.

로드된 어셈블리로부터 JIT(Just-In-Time) 컴파일된 코드가 응용 프로그램 도메인 간에 공유되는 방식을 지정할 수 있습니다. 자세한 내용은 응용 프로그램 도메인과 어셈블리를 참조하십시오.

예제

다음 코드에서는 현재 응용 프로그램 도메인에 "example.exe" 또는 "example.dll" 어셈블리를 로드하고, 해당 어셈블리에서 Example 형식을 가져온 다음, 해당 형식에 대한 매개 변수 없는 메서드인 MethodA를 가져와서 실행합니다. 로드된 어셈블리에서 정보를 가져오는 방법에 대한 자세한 설명은 동적으로 형식 로드 및 사용을 참조하십시오.

Imports System
Imports System.Reflection

Public Class Asmload0
   Public Shared Sub Main()
      ' Use the file name to load the assembly into the current 
      ' application domain.
      Dim a As [Assembly] = [Assembly].Load("example")
      ' Get the type to use.
      Dim myType As Type = a.GetType("Example")
      ' Get the method to call.
      Dim mymethod As MethodInfo = myType.GetMethod("MethodA")
      ' Create an instance
      Dim obj As Object = Activator.CreateInstance(myType)
      ' Execute the method.
      mymethod.Invoke(obj, Nothing)
   End Sub 
End Class
using System;
using System.Reflection;

public class Asmload0
{
   public static void Main () 
   {
      // Use the file name to load the assembly into the current 
      // application domain.
      Assembly a = Assembly.Load("example");
      // Get the type to use.
      Type myType = a.GetType("Example");
      // Get the method to call.
      MethodInfo mymethod = myType.GetMethod("MethodA");
      // Create an instance.
      Object obj = Activator.CreateInstance(myType);
      // Execute the method.
      mymethod.Invoke(obj,null);
   }
}
using namespace System;
using namespace System::Reflection;

void main() 
{
   // Use the file name to load the assembly into the current 
   // application domain.
   Assembly^ a = Assembly::Load("example");
   // Get the type to use.
   Type^ myType = a->GetType("Example");
   // Get the method to call.
   MethodInfo^ mymethod = myType->GetMethod("MethodA");
   // Create an instance.
   Object^ obj = Activator::CreateInstance(myType);
   // Execute the method.
   mymethod->Invoke(obj,nullptr);
}

참고 항목

작업

방법: 리플렉션 전용 컨텍스트에 어셈블리 로드

개념

응용 프로그램 도메인으로 프로그래밍

리플렉션 개요

응용 프로그램 도메인과 어셈블리

참조

ReflectionOnlyLoad

기타 리소스

공용 언어 런타임 호스팅

응용 프로그램 도메인 사용