Porady: ładowanie zestawów do domeny aplikacji
Uwaga
Ten artykuł jest specyficzny dla programu .NET Framework. Nie ma zastosowania do nowszych implementacji platformy .NET, w tym .NET 6 i nowszych wersji.
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:
Metoda LoadFromAssembly klasy ładuje zestaw, biorąc pod uwagę jego lokalizację pliku. Ładowanie zestawów za pomocą tej metody używa innego kontekstu ładowania.
Metody ReflectionOnlyLoad i ReflectionOnlyLoadFrom ładują zestaw do kontekstu tylko odbicia. Zestawy załadowane do tego kontekstu można zbadać, ale nie wykonać, umożliwiając badanie zestawów przeznaczonych dla innych platform. Zobacz Instrukcje: ładowanie zestawów do kontekstu tylko odbicia.
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.
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 Example
MethodA
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