Partilhar via


Como: Carregar assemblies em um domínio de aplicativo

Nota

Este artigo é específico do .NET Framework. Ele não se aplica a implementações mais recentes do .NET, incluindo o .NET 6 e versões posteriores.

Há várias maneiras de carregar um assembly em um domínio de aplicativo. A maneira recomendada é usar o static método (Shared no Visual Basic) Load da System.Reflection.Assembly classe. Outras maneiras pelas quais as montagens podem ser carregadas incluem:

  • O LoadFrom método da classe carrega um assembly dado seu local de Assembly arquivo. Carregar assemblies com esse método usa um contexto de carga diferente.

  • Os ReflectionOnlyLoad métodos e ReflectionOnlyLoadFrom carregam uma montagem no contexto somente reflexão. Os assemblies carregados nesse contexto podem ser examinados, mas não executados, permitindo o exame de assemblies destinados a outras plataformas. Consulte Como: Carregar assemblies no contexto somente reflexão.

Nota

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

  • Métodos como CreateInstance e CreateInstanceAndUnwrap da classe podem carregar assemblies em um domínio de AppDomain aplicativo.

  • O GetType método da Type classe pode carregar assemblies.

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

Nota

A partir do .NET Framework versão 2.0, o tempo de execução não carregará um assembly que foi compilado com uma versão do .NET Framework que tenha um número de versão maior do que o tempo de execução carregado atualmente. Isto aplica-se à combinação dos componentes principais e secundários do número de versão.

Você pode especificar a maneira como o código compilado just-in-time (JIT) de assemblies carregados é compartilhado entre domínios de aplicativo. Para obter mais informações, consulte Domínios de aplicativo e assemblies.

Exemplo

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

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

Consulte também