Lire en anglais

Partager via


AppDomain.AssemblyResolve Événement

Définition

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

C#
public event ResolveEventHandler? AssemblyResolve;
C#
public event ResolveEventHandler AssemblyResolve;
C#
[add: System.Security.SecurityCritical]
[remove: System.Security.SecurityCritical]
public event ResolveEventHandler AssemblyResolve;

Type d'événement

Implémente

Attributs

Exemples

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

Pour que cet exemple de code s’exécute, vous devez fournir le nom complet de l’assembly. Pour plus d’informations sur la façon d’obtenir le nom complet de l’assembly, consultez Noms d’assembly.

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

class AssemblyResolveSnippet
{
    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;
    }
}

Remarques

Il est de la responsabilité du ResolveEventHandler pour cet événement de retourner l’assembly spécifié par la ResolveEventArgs.Name propriété, ou de 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 du déclenché de cet événement échoue.

Pour obtenir des conseils sur l’utilisation de cet événement, consultez Résolution des charges d’assembly.

À compter de .NET Framework 4, la ResolveEventArgs.RequestingAssembly propriété retourne l’assembly qui a demandé la charge d’assembly qui n’a pas pu être résolue. Par exemple, le chargeur peut ne pas être en mesure de charger une dépendance de l’assembly demandeur, car l’assembly demandeur et sa dépendance ne se trouvent pas dans le chemin d’interrogation. Connaître l’identité de l’assembly demandeur peut être utile pour localiser la dépendance ou identifier la version correcte, si plusieurs versions de la dépendance sont disponibles. Pour plus d’informations, consultez ResolveEventArgs.RequestingAssembly.

Important

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

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

Important

Si plusieurs gestionnaires d’événements sont inscrits pour cet événement, les gestionnaires d’événements sont appelés dans l’ordre jusqu’à ce qu’un gestionnaire d’événements retourne une valeur qui n’est pas null. Les gestionnaires d’événements suivants sont ignorés.

Pour plus d'informations sur la gestion des événements, voir gestion et déclenchement d’événements.

S’applique à

Produit Versions
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1

Voir aussi