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
Conceitos
Programação com domínios de aplicativo
Domínios de Aplicativos e Assemblies