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:
Die LoadFrom-Methode der Assembly-Klasse lädt eine Assembly anhand ihres Dateispeicherorts. Wenn Assemblys mit dieser Methode geladen werden, wird ein anderer Ladekontext verwendet.
Die ReflectionOnlyLoad-Methode und die ReflectionOnlyLoadFrom-Methode laden eine Assembly in den reflektionsbezogenen Kontext. Assemblys, die in diesen Kontext geladen werden, können überprüft, aber nicht ausgeführt werden, wodurch eine Überprüfung von Assemblys ermöglicht wird, die für andere Plattformen vorgesehen sind. Siehe Gewusst wie: Laden von Assemblys in den reflektionsbezogenen Kontext.
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 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
Anwendungsdomänen und Assemblys