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 ist nicht die Assembly zu ermitteln, 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 weiß nicht, welche Assembly in der Typ definiert ist. Die zweite Situation kann auftreten, wenn Type.GetType aufgerufen wird und ein Typname, der nicht qualifiziert wird mit dem Assemblynamen angeben.

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

Allerdings die TypeResolve Ereignis tritt nicht auf, wenn die Common Language Runtime weiß, es ist nicht möglich, einen Typ in bestimmten Assemblys zu suchen. Dieses Ereignis beispielsweise nicht ausgeführt, wenn der Typ nicht in einer statischen Assembly gefunden wird, da die Common Language Runtime weiß, dass Typen dynamisch statische Assemblys hinzugefügt werden können.

Beginnend mit der .NET Framework 4die 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 wird.

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

Das folgende Beispiel zeigt die TypeResolve Ereignis.

Für dieses Codebeispiel ausführen müssen Sie den vollqualifizierten Assemblynamen bereitstellen. Informationen zur Vorgehensweise zum Abrufen der vollqualifizierte Assemblyname 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: