Procedura: caricare assembly in un dominio applicazione

Aggiornamento: novembre 2007

È possibile procedere in diversi modi per caricare un assembly in un dominio applicazione. L'approccio consigliato è l'utilizzo del metodo Loadstatic (Shared in Visual Basic) della classe System.Reflection.Assembly. Per caricare gli assembly è possibile inoltre utilizzare i seguenti metodi:

Nota:

Il contesto ReflectionOnly è stata introdotto con .NET Framework versione 2.0.

  • Metodi quali CreateInstance e CreateInstanceAndUnwrap della classe AppDomain per caricare assembly in un dominio dell'applicazione.

  • Il metodo GetType della classe Type per caricare assembly.

  • Il metodo Load della classe System.AppDomain per caricare assembly, anche se è utilizzato principalmente per l'interoperabilità COM. Non utilizzarlo per caricare assembly in un dominio applicazione diverso da quello da cui è chiamato.

Nota:

A partire da .NET Framework versione 2.0, il runtime non carica un assembly compilato con una versione di .NET Framework successiva a quella del runtime attualmente caricato. Questa indicazione è valida per la combinazione di componenti principali e secondari del numero di versione.

È possibile specificare la modalità di condivisione del codice con compilazione JIT tra domini applicazione. Per ulteriori informazioni, vedere Domini applicazione e assembly.

Esempio

Nel codice riportato di seguito si carica un assembly denominato "example.exe" o "example.dll" nel dominio applicazione corrente, si ottiene un tipo denominato Example dall'assembly, si ottiene un metodo senza parametri denominato MethodA per tale tipo e si esegue il metodo. Per un'illustrazione completa sulle modalità di recupero di informazioni da un assembly caricato, vedere Caricamento dinamico e utilizzo dei tipi.

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

Vedere anche

Attività

Procedura: caricare assembly nel contesto Reflection-Only

Concetti

Programmazione con i domini applicazione

Cenni preliminari su reflection

Domini applicazione e assembly

Riferimenti

ReflectionOnlyLoad

Altre risorse

Hosting di Common Language Runtime

Utilizzo dei domini applicazione