Questo articolo è stato tradotto automaticamente. Per visualizzare l'articolo in inglese, selezionare la casella di controllo Inglese. È possibile anche visualizzare il testo inglese in una finestra popup posizionando il puntatore del mouse sopra il testo.
Traduzione
Inglese

Evento AppDomain.AssemblyResolve

 

Data di pubblicazione: ottobre 2016

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

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

public event ResolveEventHandler AssemblyResolve

È responsabilità del ResolveEventHandler per questo evento per l'assembly specificato dal ResolveEventArgs.Name , proprietà o per restituire null se l'assembly non è riconosciuto. L'assembly deve essere caricato in un contesto di esecuzione. Se viene caricato nel contesto reflection-only, il carico che ha causato l'evento da generare.

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

A partire dal .NET Framework 4, ResolveEventArgs.RequestingAssembly proprietà restituisce l'assembly che ha richiesto il caricamento dell'assembly che non può essere risolto. Ad esempio, il caricatore potrebbe essere in grado di caricare una dipendenza dell'assembly richiesta perché l'assembly richiedente e la relativa dipendenza non sono nel percorso di sondaggio. Conoscere l'identità dell'assembly richiedente potrebbe essere utile individuare la dipendenza o identificare la versione corretta, se è disponibile più di una versione della dipendenza. Per altre informazioni, vedere ResolveEventArgs.RequestingAssembly.

System_CAPS_importantImportante

A partire dal .NET Framework 4, ResolveEventHandler evento 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 può essere chiamato più volte: una volta per ogni impostazione cultura nella catena di fallback.

Per questo evento, il ResolveEventArgs.Name proprietà restituisce il nome dell'assembly prima di applicare criteri.

System_CAPS_importantImportante

Se più di un gestore dell'evento viene registrato per questo evento, l'evento handlersarecalled in ordine fino a quando un gestore eventi restituisce un valore che non è null. Gestori di eventi successivi vengono ignorati.

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

Nell'esempio seguente viene illustrato il AssemblyResolve evento.

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

SecurityCriticalAttribute

Requires full trust for the immediate caller. This member cannot be used by partially trusted or transparent code.

.NET Framework
Disponibile da 1.1
Silverlight
Disponibile da 2.0
Torna all'inizio
Mostra: