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

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

Примечание.

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

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

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

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

Примечание.

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

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

Пример

Следующий код загружает сборку с именем "example.exe" или "example.dll" в текущий домен приложения, получает тип с именем Example из сборки, получает метод без параметров MethodA для этого типа и выполняет этот метод. Полное описание получения сведений из загруженной сборки см. в разделе Динамическая загрузка и использование типов.

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();
}
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);
    }
}
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

См. также