Porady: ładowanie zestawów do domeny aplikacji

Istnieje kilka sposobów ładowania zestawu do domeny aplikacji. Zalecanym sposobem jest użycie static metody System.Reflection.Assembly (Shared w Visual Basic) Load klasy . Inne sposoby ładowania zestawów:

Uwaga

Kontekst tylko odbicia jest nowy w programie .NET Framework w wersji 2.0.

  • Metody, takie jak CreateInstance i CreateInstanceAndUnwrapAppDomain klasy, mogą ładować zestawy do domeny aplikacji.

  • GetType Metoda Type klasy może ładować zestawy.

  • Load Metoda System.AppDomain klasy może ładować zestawy, ale jest używana głównie do współdziałania modelu COM. Nie należy jej używać do ładowania zestawów do domeny aplikacji innej niż domena aplikacji, z której jest wywoływana.

Uwaga

Począwszy od programu .NET Framework w wersji 2.0, środowisko uruchomieniowe nie załaduje zestawu skompilowanego przy użyciu wersji programu .NET Framework o wyższym numerze wersji niż aktualnie załadowane środowisko uruchomieniowe. Dotyczy to kombinacji głównych i pomocniczych składników numeru wersji.

Można określić sposób, w jaki skompilowany kod just in time (JIT) z załadowanych zestawów jest współużytkowany między domenami aplikacji. Aby uzyskać więcej informacji, zobacz Domeny aplikacji i zestawy.

Przykład

Poniższy kod ładuje zestaw o nazwie "example.exe" lub "example.dll" do bieżącej domeny aplikacji, pobiera typ o nazwie z zestawu, pobiera metodę bez parametrów o nazwie ExampleMethodA dla tego typu i wykonuje metodę . Aby uzyskać pełną dyskusję na temat uzyskiwania informacji z załadowanego zestawu, zobacz Dynamiczne ładowanie i używanie typów.

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

Zobacz też