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.AssemblyResolve

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

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

public event ResolveEventHandler AssemblyResolve

Implementa

_AppDomain.AssemblyResolve

Spetta all'oggetto ResolveEventHandler per questo evento restituire l'assembly specificato dalla proprietà ResolveEventArgs.Name o restituire null se l'assembly non viene riconosciuto. L'assembly deve essere caricato in un contesto di esecuzione; se viene caricato nel contesto ReflectionOnly, il caricamento che ha causato la generazione di questo evento non verrà completato.

Per istruzioni sull'utilizzo di questo evento, vedere Risoluzione caricamenti assembly.

A partire da .NET Framework 4, la proprietà ResolveEventArgs.RequestingAssembly restituisce l'assembly che ha richiesto il caricamento dell'assembly che non è stato possibile risolvere. Ad esempio, il caricatore potrebbe non essere in grado di caricare una dipendenza dell'assembly richiedente perché tale assembly e la relativa dipendenza non sono nel percorso di sondaggio. Conoscere l'identità dell'assembly richiedente potrebbe essere utile nell'individuazione della dipendenza o nell'identificazione della versione corretta, se sono disponibili più versioni della dipendenza. Per ulteriori informazioni, vedere ResolveEventArgs.RequestingAssembly.

Nota importanteImportante

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 veniva generato per gli assembly di risorse. Se il sistema operativo viene localizzato, il gestore potrebbe essere chiamato più volte, ovvero una volta per ciascuna delle impostazioni cultura nella catena di fallback.

Per questo evento la proprietà ResolveEventArgs.Name restituisce il nome dell'assembly prima che vengano applicati i criteri.

Nota importanteImportante

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

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

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

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.


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

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