Comment : charger des assemblys dans un domaine d'application

Mise à jour : novembre 2007

Il existe plusieurs manières de charger un assembly dans un domaine d'application. Il est recommandé d'utiliser la méthode static (Shared dans Visual Basic) Load de la classe System.Reflection.Assembly. Voici d'autres manières de charger des assemblys :

Remarque :

Le contexte de réflexion uniquement est une nouveauté de la version 2.0 du .NET Framework.

  • Les méthodes telles que CreateInstance et CreateInstanceAndUnwrap de la classe AppDomain peuvent charger des assemblys dans un domaine d'application.

  • La méthode GetType de la classe Type peut charger des assemblys.

  • La méthode Load de la classe System.AppDomain peut charger des assemblys, mais est principalement utilisée pour l'interopérabilité COM. Elle ne doit pas être utilisée pour charger des assemblys dans un domaine d'application autre que le domaine d'application duquel elle est appelée.

Remarque :

Démarrant avec le .NET Framework version 2.0, le runtime ne chargera pas un assembly qui a été compilé avec une version du .NET Framework dont le numéro de version est plus élevé que le runtime actuellement chargé. Cela s'applique à la combinaison des composants majeurs et mineurs du numéro de version.

Vous pouvez spécifier la façon dont le code compilé juste-à-temps des assemblys chargés est partagé entre les domaines d'application. Pour plus d'informations, consultez Domaines d'application et assemblys.

Exemple

Le code suivant charge un assembly nommé "example.exe" ou "example.dll" dans le domaine d'application en cours, obtient un type nommé Example de l'assembly, obtient une méthode sans paramètre nommée MethodA pour ce type, et exécute la méthode. Pour une description complète de l'obtention d'informations à partir d'un assembly chargé, consultez Chargement et utilisation dynamiques des types.

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

Voir aussi

Tâches

Comment : charger des assemblys dans le contexte de réflexion uniquement

Concepts

Programmation avec des domaines d'application

Vue d'ensemble de la réflexion

Domaines d'application et assemblys

Référence

ReflectionOnlyLoad

Autres ressources

Hébergement du Common Language Runtime

Utilisation des domaines d'application