Практическое руководство. Загрузка сборок в домен приложения
Существует несколько способов загрузки сборки в домен приложения. Рекомендуется использование static (Shared в Visual Basic) метода Load класса System.Reflection.Assembly. Другими способами загрузки сборок являются:
Метод LoadFrom класса Assembly загружает сборку, заданную расположением ее файла. При загрузке сборок с помощью этого метода используется другой контекст загрузки.
Методы ReflectionOnlyLoad и ReflectionOnlyLoadFrom загружают сборку в контекст, предназначенный только для отражения. Сборки, загруженные в этом контексте, могут быть проверены, но не выполнены, позволяя производить проверку сборок, предназначенных для других платформ. См. раздел Практическое руководство. Загрузка сборок в контекст, предназначенный только для отражения.
Примечание |
---|
Контекст только для отражения впервые появился в платформе .NET Framework версии 2.0. |
Такие методы, как CreateInstance и CreateInstanceAndUnwrap класса AppDomain могут загружать сборки в домен приложения.
Метод Load класса System.AppDomain может загружать сборки, но используется он главным образом для COM-взаимодействия. Его не следует использовать для загрузки сборок в домен приложения, отличный от домена приложения, из которого он вызывается.
Примечание |
---|
Начиная с платформы .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;
public ref 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, nullptr);
}
};
int main()
{
Asmload0::Main();
}
См. также
Задачи
Практическое руководство. Загрузка сборок в контекст, предназначенный только для отражения
Ссылки
Основные понятия
Программирование с использованием доменов приложений