Exporter (0) Imprimer
Développer tout
Cet article a fait l'objet d'une traduction automatique. Déplacez votre pointeur sur les phrases de l'article pour voir la version originale de ce texte. Informations supplémentaires.
Traduction
Source
Ce sujet n'a pas encore été évalué - Évaluez ce sujet

AppDomain.TypeResolve, événement

Se produit lorsque la résolution d'un type échoue.

Espace de noms :  System
Assembly :  mscorlib (dans mscorlib.dll)
public event ResolveEventHandler TypeResolve

Implémentations

_AppDomain.TypeResolve

L'événement TypeResolve se produit lorsque le Common Language Runtime ne parvient pas à déterminer l'assembly capable de créer le type demandé. Cela peut se produire si le type est défini dans un assembly dynamique ou si le type n'est pas défini dans un assembly dynamique mais que le runtime ne sait pas dans quel assembly le type est défini. Cette dernière situation peut se produire lorsque Type.GetType est appelé avec un nom de type qui n'est pas qualifié par le nom de l'assembly.

ResolveEventHandler de cet événement peut tenter de rechercher le type et de le créer.

Toutefois, l'événement TypeResolve ne se produit pas si le runtime sait qu'il n'est pas possible de rechercher un type dans certains assemblys. Par exemple, cet événement ne se produit pas si le type n'est pas trouvé dans un assembly statique parce que le runtime sait qu'il n'est pas possible d'ajouter des types de manière dynamique à des assemblys statiques.

Depuis le .NET Framework 4, la propriété ResolveEventArgs.RequestingAssembly contient l'assembly qui a demandé le type. Pour plus d'informations, consultez ResolveEventArgs.RequestingAssembly.

Pour inscrire un gestionnaire d'événements pour cet événement, vous devez disposer des autorisations requises, sans quoi SecurityException est levée.

Pour plus d'informations sur la gestion des événements, consultez Consommation d'événements.

L'exemple suivant illustre l'événement TypeResolve.

Pour que cet exemple de code s'exécute, vous devez fournir le nom d'assembly qualifié complet. Pour plus d'informations sur la manière d'obtenir le nom d'assembly qualifié complet, consultez Noms d'assemblys.


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

Pris en charge dans : 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Pris en charge dans : 4, 3.5 SP1
  • SecurityCriticalAttribute 

    exige une confiance totale pour l'appelant immédiat. Ce membre ne peut pas être utilisé par du code partiellement de confiance ou transparent.

Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (rôle principal du serveur non pris en charge), Windows Server 2008 R2 (rôle principal du serveur pris en charge avec SP1 ou version ultérieure ; Itanium non pris en charge)

Le .NET Framework ne prend pas en charge toutes les versions de chaque plateforme. Pour obtenir la liste des versions prises en charge, consultez Configuration requise du .NET Framework.
Cela vous a-t-il été utile ?
(1500 caractères restants)
Merci pour vos suggestions.

Ajouts de la communauté

AJOUTER
Afficher:
© 2014 Microsoft. Tous droits réservés.