Postupy: Načtení sestavení do domény aplikace
Poznámka:
Tento článek je specifický pro rozhraní .NET Framework. Nevztahuje se na novější implementace .NET, včetně .NET 6 a novějších verzí.
Existuje několik způsobů, jak načíst sestavení do domény aplikace. Doporučeným způsobem je použít metodu static
System.Reflection.Assembly (Shared
v jazyce Visual Basic) Load třídy. Mezi další způsoby načtení sestavení patří:
Metoda LoadFromAssembly třídy načte sestavení vzhledem k umístění souboru. Načítání sestavení pomocí této metody používá jiný kontext načítání.
Tyto ReflectionOnlyLoad metody ReflectionOnlyLoadFrom načítají sestavení do kontextu jen pro reflexi. Sestavení načtená do tohoto kontextu lze zkoumat, ale nespouštět, což umožňuje zkoumání sestavení, která cílí na jiné platformy. Viz Postupy: Načtení sestavení do kontextu pouze reflexe.
Poznámka:
Kontext jen pro reflexi je v rozhraní .NET Framework verze 2.0 nový.
Metody jako CreateInstance a CreateInstanceAndUnwrap třída AppDomain mohou načíst sestavení do domény aplikace.
Metoda LoadSystem.AppDomain třídy může načíst sestavení, ale primárně se používá pro interoperabilitu modelu COM. Neměla by být použita k načtení sestavení do jiné domény aplikace, než je doména aplikace, ze které je volána.
Poznámka:
Počínaje rozhraním .NET Framework verze 2.0 modul runtime nenačte sestavení kompilované s verzí rozhraní .NET Framework, která má vyšší číslo verze než aktuálně načtený modul runtime. To platí pro kombinaci hlavních a podverze čísla verze.
Můžete určit způsob, jakým se zkompilovaný kód za běhu (JIT) z načtených sestavení sdílí mezi doménami aplikace. Další informace naleznete v tématu Domény aplikace a sestavení.
Příklad
Následující kód načte sestavení s názvem "example.exe" nebo "example.dll" do aktuální domény aplikace, získá typ pojmenovaný Example
ze sestavení, získá metodu bez parametrů pojmenovanou MethodA
pro tento typ a spustí metodu. Úplnou diskuzi o získání informací z načteného sestavení naleznete v tématu Dynamické načítání a používání typů.
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