Procedura: caricare assembly in un dominio applicazione
È possibile procedere in diversi modi per caricare un assembly in un dominio applicazione. L'approccio consigliato è l'utilizzo del metodo Load static (Shared in Visual Basic) della classe System.Reflection.Assembly. Per caricare gli assembly è possibile inoltre utilizzare i seguenti metodi:
Il metodo LoadFrom della classe Assembly per caricare un assembly specificando il percorso del file. Se gli assembly vengono caricati utilizzando questo metodo viene utilizzato un contesto di caricamento diverso.
I metodi ReflectionOnlyLoad e ReflectionOnlyLoadFrom per caricare un assembly nel contesto ReflectionOnly. Gli assembly caricati in questo contesto possono essere esaminati ma non eseguiti. In questo modo è possibile esaminare assembly destinati ad altre piattaforme. Vedere Procedura: caricare assembly nel contesto Reflection-Only.
Nota |
---|
Il contesto ReflectionOnly è stata introdotto con .NET Framework versione 2.0. |
Metodi quali CreateInstance e CreateInstanceAndUnwrap della classe AppDomain per caricare assembly in un dominio dell'applicazione.
Il metodo Load della classe System.AppDomain per caricare assembly, anche se è utilizzato principalmente per l'interoperabilità COM. Non utilizzarlo per caricare assembly in un dominio applicazione diverso da quello da cui è chiamato.
Nota |
---|
A partire da .NET Framework versione 2.0, il runtime non carica un assembly compilato con una versione di .NET Framework successiva a quella del runtime attualmente caricato.Questa indicazione è valida per la combinazione di componenti principali e secondari del numero di versione. |
È possibile specificare la modalità di condivisione del codice con compilazione JIT tra domini applicazione. Per ulteriori informazioni, vedere Domini applicazione e assembly.
Esempio
Nel codice riportato di seguito si carica un assembly denominato "example.exe" o "example.dll" nel dominio applicazione corrente, si ottiene un tipo denominato Example dall'assembly, si ottiene un metodo senza parametri denominato MethodA per tale tipo e si esegue il metodo. Per un'illustrazione completa sulle modalità di recupero di informazioni da un assembly caricato, vedere Caricamento dinamico e utilizzo dei tipi.
Imports System
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
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);
}
}
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();
}
Vedere anche
Attività
Procedura: caricare assembly nel contesto Reflection-Only
Riferimenti
Concetti
Cenni preliminari sull'hosting
Programmazione con i domini applicazione
Domini applicazione e assembly