Compartilhar via


Como: Carregar Assemblies em um domínio de aplicativo

Há várias maneiras para carregar um conjunto de módulos (assembly) em um domínio de aplicativo. A maneira recomendada é usar o método static (Shared no Visual Basic) Load da classe System.Reflection.Assembly. Outras maneiras pelas quais os conjuntos de módulos (assemblies) pode ser carregados incluem:

  • O método LoadFrom da classe Assembly carrega um conjunto de módulos (assembly) dado seu arquivo local. Carregar conjuntos de módulos (assemblies) com este método usa um contexto de carregamento diferente.

  • Os métodos ReflectionOnlyLoad e ReflectionOnlyLoadFrom carregam um conjunto de módulos (assembly) num contexto exclusivo de reflexão. Conjuntos de Módulos (Assemblies) carregados neste contexto pode ser examinados, mas não executados, permitindo que o exame dos conjuntos que tem como destino outras plataformas. Consulte Como: Carregar Assemblies no contexto somente de reflexão.

Observação

O contexto exclusivo de reflexão é novo no .NET Framework versão 2.0.

  • Métodos como CreateInstance e CreateInstanceAndUnwrap da classe AppDomain podem carregar conjuntos de módulos (assemblies) em um domínio do aplicativo.

  • O método GetType da classe Type pode carregar conjuntos de módulos (assemblies).

  • O método Load da classe System.AppDomain pode carregar conjuntos de módulos (assemblies), mas é basicamente usado para interoperabilidade COM. Ele não deve ser usado para carregar conjuntos de módulos (assemblies) em um domínio diferente do domínio de aplicativo do qual ele é chamado.

Observação

A partir do .NET Framework versão 2.0, o ambiente de execução não carregará um conjunto de módulos (assembly) que foi compilado com uma versão do .NET Framework que tenha um número de versão maior do que o ambiente de execução carregado no momento.Isso se aplica à combinação dos componentes principais e secundárias do número da versão.

Você pode especificar a maneira com que o código compilado just-in-time (JIT) dos conjuntos carregados é compartilhada entre domínios de aplicativos. Para obter mais informações, consulte Domínios de Aplicativos e Assemblies.

Exemplo

O código a seguir carrega um conjunto de módulos (assembly) chamado "example.exe" ou "example.dll" para o domínio de aplicativo atual, recebe um tipo do conjunto chamado Example, obtém um método sem-parâmetros chamado MethodA para esse tipo, e executa o método. Para uma discussão completa sobre como obter as informações de um assembly carregado, consulte Carregando dinamicamente e usando tipos.

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

Consulte também

Tarefas

Como: Carregar Assemblies no contexto somente de reflexão

Referência

ReflectionOnlyLoad

Conceitos

Visão geral de hospedagem.

Programação com domínios de aplicativo

Reflexão

Domínios de Aplicativos e Assemblies

Outros recursos

Usando domínios de aplicativos