Dieser Artikel wurde maschinell übersetzt. Wenn Sie die englische Version des Artikels anzeigen möchten, aktivieren Sie das Kontrollkästchen Englisch. Sie können den englischen Text auch in einem Popupfenster anzeigen, indem Sie den Mauszeiger über den Text bewegen.
Übersetzung
Englisch

AppDomain.TypeResolve-Ereignis

 

Veröffentlicht: Oktober 2016

Tritt ein, wenn die Auflösung eines Typs fehlschlägt.

Namespace:   System
Assembly:  mscorlib (in mscorlib.dll)

public event ResolveEventHandler TypeResolve

Die TypeResolve Ereignis tritt auf, wenn die common Language Runtime kann die Assembly zu bestimmen, die den angeforderten Typ erstellen können. Dies kann auftreten, wenn der Typ in einer dynamischen Assembly definiert ist oder der Typ nicht in einer dynamischen Assembly definiert ist, aber die Common Language Runtime nicht bekannt ist, welche Assembly in der Typ definiert ist. Die zweite Situation kann auftreten, wenn Type.GetType mit einem Typnamen, die nicht qualifiziert wird mit den Namen der Assembly aufgerufen.

Die ResolveEventHandler für dieses Ereignis versuchen kann, suchen und erstellen Sie den Typ.

Allerdings die TypeResolve Ereignis tritt nicht auf, wenn der Runtime mitzuteilen, es ist nicht möglich, ein Typ in bestimmten Assemblys nicht gefunden. Dieses Ereignis tritt z. B. nicht auf, wenn der Typ nicht in einer statischen Assembly gefunden wird, da die Common Language Runtime davon ausgeht, dass Typen statischen Assemblys dynamisch hinzugefügt werden können.

Beginnend mit der .NET Framework 4, die ResolveEventArgs.RequestingAssembly -Eigenschaft enthält die Assembly, die den Typ angefordert hat. Weitere Informationen finden Sie unter ResolveEventArgs.RequestingAssembly.

Um einen Ereignishandler für dieses Ereignis zu registrieren, benötigen Sie die erforderlichen Berechtigungen, oder ein SecurityException ausgelöst.

Weitere Informationen zur Behandlung von Ereignissen finden Sie unter Behandeln und Auslösen von Ereignissen.

Das folgende Beispiel veranschaulicht die TypeResolve Ereignis.

Für dieses Codebeispiel ausführen müssen Sie den vollqualifizierten Assemblynamen bereitstellen. Informationen dazu, wie Sie den vollqualifizierten Assemblynamen erhalten, finden Sie unter Assemblynamen.

using System;
using System.Reflection;
using System.Reflection.Emit;

class Test 
{
    // For this code example, the following information needs to be
    // available to both Main and the HandleTypeResolve event
    // handler:
    private static AssemblyBuilder ab;
    private static string moduleName;

    public static void Main() 
    {
        AppDomain currDom = AppDomain.CurrentDomain;

        // Create a dynamic assembly with one module, to be saved to 
        // disk (AssemblyBuilderAccess.Save).
        // 
        AssemblyName aName = new AssemblyName();
        aName.Name = "Transient";
        moduleName = aName.Name + ".dll";
        ab = currDom.DefineDynamicAssembly(aName,
            AssemblyBuilderAccess.Save);
        ModuleBuilder mb = ab.DefineDynamicModule(aName.Name, moduleName);

        // The dynamic assembly has just one dummy type, to demonstrate
        // type resolution.
        TypeBuilder tb = mb.DefineType("Example");
        tb.CreateType();


        // First, try to load the type without saving the dynamic 
        // assembly and without hooking up the TypeResolve event. The
        // type cannot be loaded.
        try
        {
            Type temp = Type.GetType("Example", true);
            Console.WriteLine("Loaded type {0}.", temp);
        }
        catch (TypeLoadException)
        {
            Console.WriteLine("Loader could not resolve the type.");
        }

        // Hook up the TypeResolve event.
        //      
        currDom.TypeResolve += 
            new ResolveEventHandler(HandleTypeResolve);

        // Now try to load the type again. The TypeResolve event is 
        // raised, the dynamic assembly is saved, and the dummy type is
        // loaded successfully. Display it to the console, and create
        // an instance.
        Type t = Type.GetType("Example", true);
        Console.WriteLine("Loaded type \"{0}\".", t);
        Object o = Activator.CreateInstance(t);
    }

    static Assembly HandleTypeResolve(object sender, ResolveEventArgs args) 
    {
        Console.WriteLine("TypeResolve event handler.");

        // Save the dynamic assembly, and then load it using its
        // display name. Return the loaded assembly.
        //
        ab.Save(moduleName);
        return Assembly.Load(ab.FullName); 
    }
}

/* This code example produces the following output:

Loader could not resolve the type.
TypeResolve event handler.
Loaded type "Example".
 */

SecurityCriticalAttribute

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

.NET Framework
Verfügbar seit 1.1
Zurück zum Anfang
Anzeigen: