Vorgehensweise: Laden von Assemblys in eine Anwendungsdomäne
Hinweis
Dieser Artikel gilt für das .NET Framework. Er gilt nicht für neuere Implementierungen von .NET, einschließlich .NET 6 und höherer Versionen.
Es gibt mehrere Möglichkeiten, eine Assembly in eine Anwendungsdomäne zu laden. Es wird empfohlen, die static
Load-Methode (Shared
in Visual Basic) der Klasse System.Reflection.Assembly zu verwenden. Es gibt noch weitere Möglichkeiten, Assemblys zu laden:
Die LoadFrom-Methode der Klasse Assembly lädt eine Assembly, sofern deren Speicherort angegeben wird. Beim Laden von Assemblys mit dieser Methode wird ein anderer Load-Kontext verwendet.
Die Methoden ReflectionOnlyLoad und ReflectionOnlyLoadFrom laden eine Assembly in den ReflectionOnly-Kontext. In diesen Kontext geladene Assemblys können untersucht, aber nicht ausgeführt werden. So können Assemblys untersucht werden, die andere Zielplattformen aufweisen. Weitere Informationen finden Sie unter How to: Laden von Assemblys in den reflexionsbezogenen Kontext.
Hinweis
Der ReflectionOnly-Kontext ist neu in .NET Framework, Version 2.0.
Methoden der AppDomain-Klasse, wie etwa CreateInstance und CreateInstanceAndUnwrap, können Assemblys in eine Anwendungsdomäne laden.
Die Load-Methode der System.AppDomain-Klasse kann Assemblys laden, wird aber hauptsächlich für COM-Interoperabilität verwendet. Sie sollte nicht zum Laden von Assemblys in eine andere als diejenige Anwendungsdomäne verwendet werden, aus der sie geladen wurde.
Hinweis
Ab .NET Framework, Version 2.0, lädt die Runtime keine Assembly, die mit einer Version von .NET Framework kompiliert wurde, die eine höhere Versionsnummer als die aktuell geladene Runtime besitzt. Dies gilt für die Kombination der Haupt- und Nebenkomponenten der Versionsnummer.
Sie können angeben, wie der kompilierte Just-In-Time-Code (JIT) aus geladenen Assemblys von mehreren Anwendungsdomänen gemeinsam verwendet wird. Weitere Informationen finden Sie unter Application Domains and Assemblies (Anwendungsdomänen und Assemblys).
Beispiel
Der folgende Code lädt eine Assembly mit dem Namen „example.exe“ oder „example.dll“ in die aktuelle Anwendungsdomäne, ruft einen Typ mit dem Namen Example
aus der Assembly ab, ruft für diesen Typ eine Methode mit dem Namen MethodA
ohne Parameter ab, und führt die Methode aus. Eine vollständige Erläuterung des Abrufens von Informationen aus einer geladenen Assembly finden Sie unter Dynamically Loading and Using Types (Dynamisches Laden und Verwenden von Typen).
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();
}
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);
}
}
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
Siehe auch
- ReflectionOnlyLoad
- Programming with Application Domains (Programmieren mit Anwendungsdomänen)
- Reflexion
- Verwenden von Anwendungsdomänen
- How to: Load Assemblies into the Reflection-Only Context (Gewusst wie: Laden von Assemblys in den auf Reflektion beschränkten Kontext)
- Anwendungsdomänen und Assemblys