Dela via


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:

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

Se även