Leggere in inglese

Condividi tramite


AppDomain.AssemblyResolve Evento

Definizione

Si verifica quando la risoluzione di un assembly ha esito negativo.

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

Tipo evento

Implementazioni

Attributi

Esempio

L'esempio seguente illustra l'evento AssemblyResolve .

Per eseguire questo esempio di codice, è necessario specificare il nome dell'assembly completo. Per informazioni su come ottenere il nome dell'assembly completo, vedere Nomi di 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;
    }
}

Commenti

È responsabilità dell'evento ResolveEventHandler restituire l'assembly specificato dalla ResolveEventArgs.Name proprietà o restituire Null se l'assembly non viene riconosciuto. L'assembly deve essere caricato in un contesto di esecuzione; se viene caricato nel contesto di sola reflection, il carico che ha causato l'esito negativo di questo evento.

Per indicazioni sull'uso di questo evento, vedere Risoluzione dei carichi di assembly.

A partire da .NET Framework 4, la ResolveEventArgs.RequestingAssembly proprietà restituisce l'assembly che ha richiesto il carico dell'assembly che non è stato possibile risolvere. Ad esempio, il caricatore potrebbe non essere in grado di caricare una dipendenza dell'assembly di richiesta perché l'assembly di richiesta e la relativa dipendenza non si trovano nel percorso di probing. La conoscenza dell'identità dell'assembly di richiesta potrebbe essere utile nell'individuazione della dipendenza o nell'identificazione della versione corretta, se è disponibile più di una versione della dipendenza. Per altre informazioni, vedere ResolveEventArgs.RequestingAssembly.

Importante

A partire da .NET Framework 4, l'evento ResolveEventHandler viene generato per tutti gli assembly, inclusi gli assembly di risorse. Nelle versioni precedenti l'evento non è stato generato per gli assembly di risorse. Se il sistema operativo è localizzato, il gestore potrebbe essere chiamato più volte: una volta per ogni cultura nella catena di fallback.

Per questo evento, la ResolveEventArgs.Name proprietà restituisce il nome dell'assembly prima dell'applicazione dei criteri.

Importante

Se per questo evento vengono registrati più gestori eventi, i gestori eventi vengono chiamati in ordine fino a quando un gestore eventi restituisce un valore che non nullè . I gestori eventi successivi vengono ignorati.

Per ulteriori informazioni sulla gestione degli eventi, consultare gestione e generazione di eventi.

Si applica a

Prodotto Versioni
.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

Vedi anche