Anvisningar: Läsa in sammansättningar i en programdomän
Kommentar
Den här artikeln är specifik för .NET Framework. Det gäller inte för nyare implementeringar av .NET, inklusive .NET 6 och senare versioner.
Det finns flera sätt att läsa in en sammansättning i en programdomän. Det rekommenderade sättet är att använda static
metoden (Shared
i Visual Basic) Load för System.Reflection.Assembly klassen. Andra sätt som sammansättningar kan läsas in på är:
Metoden LoadFrom för Assembly klassen läser in en sammansättning med tanke på dess filplats. När sammansättningar läses in med den här metoden används en annan inläsningskontext.
Metoderna ReflectionOnlyLoad och ReflectionOnlyLoadFrom läser in en sammansättning i kontexten endast reflektion. Sammansättningar som läses in i den här kontexten kan undersökas men inte köras, vilket gör det möjligt att undersöka sammansättningar som riktar sig mot andra plattformar. Se How to: Load Assemblies into the Reflection-Only Context (Läsa in sammansättningar i kontexten endast reflektion).
Kommentar
Reflektionskontexten är ny i .NET Framework version 2.0.
Metoder som CreateInstance och CreateInstanceAndUnwrap för AppDomain klassen kan läsa in sammansättningar i en programdomän.
Metoden GetType för Type klassen kan läsa in sammansättningar.
Metoden Load för System.AppDomain klassen kan läsa in sammansättningar, men används främst för COM-samverkan. Den bör inte användas för att läsa in sammansättningar i en annan programdomän än den programdomän som den anropas från.
Kommentar
Från och med .NET Framework version 2.0 läser körningen inte in en sammansättning som kompilerats med en version av .NET Framework som har ett högre versionsnummer än den för närvarande inlästa körningen. Detta gäller för kombinationen av huvudkomponenterna och delkomponenterna i versionsnumret.
Du kan ange hur jit-kompilerad kod (just-in-time) från inlästa sammansättningar delas mellan programdomäner. Mer information finns i Programdomäner och sammansättningar.
Exempel
Följande kod läser in en sammansättning med namnet "example.exe" eller "example.dll" i den aktuella programdomänen, hämtar en typ med namnet Example
från sammansättningen, hämtar en parameterlös metod med namnet MethodA
för den typen och kör metoden. En fullständig diskussion om hur du hämtar information från en inläst sammansättning finns i Dynamisk inläsning och användning av typer.
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