Gewusst wie: Laden von Assemblys in eine Anwendungsdomäne

Aktualisiert: November 2007

Es gibt mehrere Möglichkeiten, eine Assembly in eine Anwendungsdomäne zu laden. Es wird empfohlen, hierzu die static (Shared in Visual Basic) Load-Methode der System.Reflection.Assembly-Klasse zu verwenden. Darüber hinaus können Assemblys u. a. auf folgende Arten geladen werden:

Hinweis:

Der reflektionsbezogene Kontext ist neu in .NET Framework, Version 2.0.

  • Methoden wie CreateInstance und CreateInstanceAndUnwrap der AppDomain-Klasse können Assemblys in eine Anwendungsdomäne laden.

  • Die GetType-Methode der Type-Klasse kann Assemblys laden.

  • Die Load-Methode der System.AppDomain-Klasse kann Assemblys laden, wird allerdings für die COM-Interoperabilität verwendet. Mit dieser Methode sollten Assemblys nur in die Anwendungsdomäne geladen werden, von der sie aufgerufen wird.

Hinweis:

Ab .NET Framework, Version 2.0, lädt die Laufzeit keine Assemblys mehr, die mit einer Version von .NET Framework kompiliert wurden, deren Versionsnummer höher ist als die der aktuell geladenen Laufzeit. Dies gilt für die Kombination aus den Haupt- und Nebenkomponenten der Versionsnummer.

Sie können angeben, auf welche Weise der JIT-kompilierte Code (Just-In-Time) aus geladenen Assemblys von Anwendungsdomänen gemeinsam genutzt wird. Weitere Informationen finden Sie unter Anwendungsdomänen und Assemblys.

Beispiel

Mit dem folgenden Code wird eine Assembly namens "example.exe" oder "example.dll" in die aktuelle Anwendungsdomäne geladen, ein Typ namens Example aus der Assembly abgerufen, eine parameterlose Methode namens MethodA für diesen Typ abgerufen und die Methode ausgeführt. Eine ausführliche Übersicht über das Abrufen von Informationen aus einer geladenen Assembly finden Sie unter Dynamisches Laden und Verwenden von Typen.

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

Siehe auch

Aufgaben

Gewusst wie: Laden von Assemblys in den reflektionsbezogenen Kontext

Konzepte

Programmieren mit Anwendungsdomänen

Übersicht über Reflektion

Anwendungsdomänen und Assemblys

Referenz

ReflectionOnlyLoad

Weitere Ressourcen

Bereitstellen der Common Language Runtime

Verwenden von Anwendungsdomänen