İngilizce dilinde oku

Aracılığıyla paylaş


AppDomain.TypeResolve Olay

Tanım

Bir türün çözünürlüğü başarısız olduğunda gerçekleşir.

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

Olay Türü

Uygulamalar

Öznitelikler

Örnekler

Aşağıdaki örnekte olayı gösterilmektedir TypeResolve .

Bu kod örneğinin çalışması için, tam derleme adını sağlamanız gerekir. Tam derleme adını alma hakkında bilgi için bkz. Derleme Adları.

C#
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".
 */

Açıklamalar

Olay, TypeResolve ortak dil çalışma zamanı istenen türü oluşturabilecek derlemeyi belirleyemediğinde gerçekleşir. Bu durum, tür bir dinamik derlemede tanımlandığında veya tür dinamik derlemede tanımlanmadıysa ancak çalışma zamanı türün hangi derlemede tanımlandığını bilmiyorsa oluşabilir. İkinci durum, derleme adıyla nitelenmeyen bir tür adıyla çağrıldığında Type.GetType ortaya çıkabilir.

ResolveEventHandler Bu olay için türü bulmayı ve oluşturmayı dener.

Ancak, TypeResolve çalışma zamanı belirli derlemelerde bir tür bulmanın mümkün olmadığını bilirse olay gerçekleşmez. Örneğin, çalışma zamanı türleri statik derlemelere dinamik olarak eklenemeyeceğini bildiği için tür statik derlemede bulunmazsa bu olay gerçekleşmez.

.NET Framework 4 ile başlayarak özelliği, ResolveEventArgs.RequestingAssembly türü istenen derlemeyi içerir. Daha fazla bilgi için bkz. ResolveEventArgs.RequestingAssembly.

Bu olay için bir olay işleyicisi kaydetmek için gerekli izinlere sahip olmanız gerekir, aksi durumda bir SecurityException oluşturulur.

Olayları işleme hakkında daha fazla bilgi için bkz. Olayları İşleme ve Oluşturma.

Şunlara uygulanır

Ürün Sürümler
.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

Ayrıca bkz.