Exporter (0) Imprimer
Développer tout
Cet article a fait l'objet d'une traduction manuelle. Déplacez votre pointeur sur les phrases de l'article pour voir la version originale de ce texte.
Traduction
Source

AppDomain.AssemblyResolve, événement

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

Espace de noms :  System
Assembly :  mscorlib (dans mscorlib.dll)

public event ResolveEventHandler AssemblyResolve

Implémentations

_AppDomain.AssemblyResolve

C'est la responsabilité du ResolveEventHandler pour cet événement pour retourner l'assembly spécifié par la propriété ResolveEventArgs.Name, ou retourner null si l'assembly n'est pas reconnu. L'assembly doit être chargé dans un contexte d'exécution ; s'il est chargé dans le contexte de réflexion uniquement, la charge à l'origine de cet événement échoue. Pour obtenir des instructions sur l'utilisation de cet événement, consultez Résolution des chargements d'assemblys.

Depuis le .NET Framework version 4, la propriété ResolveEventArgs.RequestingAssembly retourne l'assembly ayant demandé le chargement d'assembly qui n'a pas pu être résolu. Par exemple, il est possible que le chargeur ne puisse pas charger une dépendance de l'assembly demandeur car ce dernier et sa dépendance ne se trouvent pas dans le chemin d'accès de détection. Connaître l'identité de l'assembly demandeur peut être utile pour la recherche de la dépendance ou pour l'identification de la version correcte, si plusieurs versions de la dépendance sont disponibles. Pour plus d'informations, consultez ResolveEventArgs.RequestingAssembly.

Remarque importanteImportant

À partir de .NET Framework 4, l'événement ResolveEventHandler est déclenché pour tous les assemblys, notamment les assemblys de ressources. Dans les versions antérieures, l'événement n'a pas été déclenché pour les assemblys de ressource. Si le système d'exploitation est localisé, le gestionnaire peut être appelé plusieurs fois : une fois pour chaque culture contenue dans la chaîne de secours.

Pour cet événement, la propriété ResolveEventArgs.Name retourne le nom de l'assembly avant l'application de la stratégie.

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

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

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.


public class MyType
{
    public MyType()
    {
        Console.WriteLine();
        Console.WriteLine("MyType instantiated!");
    }
}

class Test
{
    public static void Main()
    {
        AppDomain currentDomain = AppDomain.CurrentDomain;

        // This call will fail to create an instance of MyType since the
        // assembly resolver is not set
        InstantiateMyTypeFail(currentDomain);

        currentDomain.AssemblyResolve += new ResolveEventHandler(MyResolveEventHandler);

        // This call will succeed in creating an instance of MyType since the
        // assembly resolver is now set.
        InstantiateMyTypeFail(currentDomain);

        // This call will succeed in creating an instance of MyType since the
        // assembly name is valid.
        InstantiateMyTypeSucceed(currentDomain);
    }

    private static void InstantiateMyTypeFail(AppDomain domain)
    {
        // Calling InstantiateMyType will always fail since the assembly info
        // given to CreateInstance is invalid.
        try
        {
            // You must supply a valid fully qualified assembly name here.
            domain.CreateInstance("Assembly text name, Version, Culture, PublicKeyToken", "MyType");
        }
        catch (Exception e)
        {
            Console.WriteLine();
            Console.WriteLine(e.Message);
        }
    }

    private static void InstantiateMyTypeSucceed(AppDomain domain)
    {
        try
        {
            string asmname = Assembly.GetCallingAssembly().FullName;
            domain.CreateInstance(asmname, "MyType");
        }
        catch (Exception e)
        {
            Console.WriteLine();
            Console.WriteLine(e.Message);
        }
    }

    private static Assembly MyResolveEventHandler(object sender, ResolveEventArgs args)
    {
        Console.WriteLine("Resolving...");
        return typeof(MyType).Assembly;
    }
}


.NET Framework

Pris en charge dans : 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 7, Windows Vista SP1 ou ultérieur, Windows XP SP3, Windows XP SP2 Édition x64, Windows Server 2008 (installation minimale non prise en charge), Windows Server 2008 R2 (installation minimale prise en charge avec SP1 ou version ultérieure), Windows Server 2003 SP2

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.

Ajouts de la communauté

AJOUTER
Afficher:
© 2014 Microsoft