Esporta (0) Stampa
Espandi tutto
Il presente articolo è stato tradotto automaticamente. Passare il puntatore sulle frasi nell'articolo per visualizzare il testo originale. Ulteriori informazioni.
Traduzione
Originale

Evento AppDomain.TypeResolve

Viene generato quando la risoluzione di un tipo ha esito negativo.

Spazio dei nomi:  System
Assembly:  mscorlib (in mscorlib.dll)

public event ResolveEventHandler TypeResolve

Implementa

_AppDomain.TypeResolve

L'evento TypeResolve viene generato quando in Common Language Runtime non è possibile determinare l'assembly che può creare il tipo richiesto. Ciò può verificarsi se il tipo è definito in un assembly dinamico oppure se il tipo non è definito in un assembly dinamico ma il runtime non sa in quale assembly il tipo è definito. Si può verificare la seconda situazione quando Type.GetType viene chiamato con un nome del tipo che non è qualificato con il nome dell'assembly.

Mediante l'oggetto ResolveEventHandler per questo evento è possibile tentare di individuare il tipo e caricarlo.

Tuttavia, l'evento TypeResolve non verrà generato se è noto che un determinato tipo non può essere individuato in determinati assembly. Non verrà generato, ad esempio, se il tipo non viene trovato in un assembly statico dal momento che è noto che non è possibile aggiungere tipi ad assembly statici in modo dinamico.

A partire da .NET Framework 4, la proprietà ResolveEventArgs.RequestingAssembly contiene l'assembly che ha richiesto il tipo. Per ulteriori informazioni, vedere ResolveEventArgs.RequestingAssembly.

Per registrare un gestore eventi per l'evento è necessario disporre delle necessarie autorizzazioni o verrà generata un'eccezione SecurityException.

Per ulteriori informazioni sulla gestione degli eventi, vedere Utilizzo degli eventi.

Nell'esempio riportato di seguito viene illustrato l'evento TypeResolve.

Per eseguire l'esempio di codice è necessario fornire il nome completo dell'assembly. Per informazioni sul modo in cui è possibile ottenere il nome completo dell'assembly, vedere Nomi degli assembly.


using System;
using System.Reflection;
using System.Reflection.Emit;

class Test 
{
    // For this code example, the following information needs to be
    // available to both Main and the HandleTypeResolve event
    // handler:
    private static AssemblyBuilder ab;
    private static string moduleName;

    public static void Main() 
    {
        AppDomain currDom = AppDomain.CurrentDomain;

        // Create a dynamic assembly with one module, to be saved to 
        // disk (AssemblyBuilderAccess.Save).
        // 
        AssemblyName aName = new AssemblyName();
        aName.Name = "Transient";
        moduleName = aName.Name + ".dll";
        ab = currDom.DefineDynamicAssembly(aName,
            AssemblyBuilderAccess.Save);
        ModuleBuilder mb = ab.DefineDynamicModule(aName.Name, moduleName);

        // The dynamic assembly has just one dummy type, to demonstrate
        // type resolution.
        TypeBuilder tb = mb.DefineType("Example");
        tb.CreateType();


        // First, try to load the type without saving the dynamic 
        // assembly and without hooking up the TypeResolve event. The
        // type cannot be loaded.
        try
        {
            Type temp = Type.GetType("Example", true);
            Console.WriteLine("Loaded type {0}.", temp);
        }
        catch (TypeLoadException)
        {
            Console.WriteLine("Loader could not resolve the type.");
        }

        // Hook up the TypeResolve event.
        //      
        currDom.TypeResolve += 
            new ResolveEventHandler(HandleTypeResolve);

        // Now try to load the type again. The TypeResolve event is 
        // raised, the dynamic assembly is saved, and the dummy type is
        // loaded successfully. Display it to the console, and create
        // an instance.
        Type t = Type.GetType("Example", true);
        Console.WriteLine("Loaded type \"{0}\".", t);
        Object o = Activator.CreateInstance(t);
    }

    static Assembly HandleTypeResolve(object sender, ResolveEventArgs args) 
    {
        Console.WriteLine("TypeResolve event handler.");

        // Save the dynamic assembly, and then load it using its
        // display name. Return the loaded assembly.
        //
        ab.Save(moduleName);
        return Assembly.Load(ab.FullName); 
    }
}

/* This code example produces the following output:

Loader could not resolve the type.
TypeResolve event handler.
Loaded type "Example".
 */


.NET Framework

Supportato in: 4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Supportato in: 4, 3.5 SP1

  • SecurityCriticalAttribute 

    Richiede l'attendibilità totale per il chiamante immediato. Questo membro non può essere utilizzato da codice parzialmente attendibile o trasparente.

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (ruoli di base del server non supportati), Windows Server 2008 R2 (ruoli di base del server supportati con SP1 o versione successiva, Itanium non supportato)

.NET Framework non supporta tutte le versioni di ciascuna piattaforma. Per un elenco delle versioni supportate, vedere Requisiti di sistema di .NET Framework.

Aggiunte alla community

AGGIUNGI
Mostra:
© 2014 Microsoft