Este artículo se tradujo automáticamente. Para ver el artículo en inglés, active la casilla Inglés. Además, puede mostrar el texto en inglés en una ventana emergente si mueve el puntero del mouse sobre el texto.
Traducción
Inglés

Evento AppDomain.TypeResolve

 

Publicado: octubre de 2016

Se produce cuando la resolución de un tipo produce errores.

Espacio de nombres:   System
Ensamblado:  mscorlib (en mscorlib.dll)

public event ResolveEventHandler TypeResolve

El TypeResolve evento se produce cuando common language runtime no se puede determinar el ensamblado que se puede crear el tipo solicitado. Esto puede ocurrir si el tipo se define en un ensamblado dinámico, o el tipo no está definido en un ensamblado dinámico pero el tiempo de ejecución no sabe en qué ensamblado se define el tipo de. La última situación puede producirse cuando Type.GetType se llama con un nombre de tipo que no está calificado con el nombre del ensamblado.

La ResolveEventHandler de este evento puede intentar localizar y crear el tipo.

Sin embargo, la TypeResolve evento no se produce si el tiempo de ejecución sabe que no es posible encontrar un tipo en determinados ensamblados. Por ejemplo, este evento no se produce si el tipo no se encuentra en un ensamblado estático porque el tiempo de ejecución sabe que no se puede agregar los tipos dinámicamente a los ensamblados estáticos.

A partir del .NET Framework 4, el ResolveEventArgs.RequestingAssembly propiedad contiene el ensamblado que el tipo solicitado. Para obtener más información, consulta ResolveEventArgs.RequestingAssembly.

Para registrar un controlador de eventos para este evento, debe tener los permisos necesarios, o un SecurityException se produce.

Para obtener más información sobre el control de eventos, vea Controlar y provocar eventos.

El ejemplo siguiente se muestra el TypeResolve eventos.

Para que poder ejecutar este ejemplo de código, debe proporcionar el nombre completo del ensamblado. Para obtener información acerca de cómo obtener el nombre de ensamblado completo, vea Nombres de ensamblado.

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
Disponible desde 1.1
Volver al principio
Mostrar: