Поделиться через


Практическое руководство. Загрузка сборок в домен приложения

Обновлен: Ноябрь 2007

Существует несколько способов загрузки сборки в домен приложения. Рекомендуется использование static (Shared в Visual Basic) метода Load класса System.Reflection.Assembly. Другими способами загрузки сборок являются:

25y1ya39.alert_note(ru-ru,VS.90).gifПримечание.

Контекст только для отражения впервые появился в платформе .NET Framework версии 2.0.

  • Такие методы, как CreateInstance и CreateInstanceAndUnwrap класса AppDomain могут загружать сборки в домен приложения.

  • Метод GetType класса Type может загружать сборки.

  • Метод Load класса System.AppDomain может загружать сборки, но используется он главным образом для COM-взаимодействия. Его не следует использовать для загрузки сборок в домен приложения, отличный от домена приложения, из которого он вызывается.

25y1ya39.alert_note(ru-ru,VS.90).gifПримечание.

Начиная с платформы .NET Framework версии 2.0, среда выполнения не загружает сборки, которые были скомпилированы версиями платформы .NET Framework, чей номер версии выше, чем у текущей среды выполнения. Это относится к сочетанию основных и дополнительных номеров версий.

Можно определить способ, которым JIT-скомпилированный код из загруженных сборок будет распределен между доменами приложений. Дополнительные сведения см. в разделе Домены приложений и сборки.

Пример

Следующий код загружает сборку с именем "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

Другие ресурсы

Размещение среды CLR

Использование доменов приложений