Compartilhar via


Como: Carregar assemblies em um domínio do 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 para o contexto somente de Reflexo.

Observação:

O contexto somente de reflexão é Novo no .NET estrutura 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:

Começando com o .NET estrutura versão 2.0, o tempo de execução não será carregado um assembly que foi compilado com uma versão do .NET estrutura possui um número de versão superior que atualmente carregado tempo de execução.Isso se aplica a 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;

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

Consulte também

Tarefas

Como: Carregar assemblies para o contexto somente de Reflexo

Conceitos

Programação com domínios de aplicativo

Visão geral de reflexão

Domínios de Aplicativos e Assemblies

Referência

ReflectionOnlyLoad

Outros recursos

Hospedagem do Common Language Runtime

Usando domínios de aplicativos