Esta documentación está archivada y no tiene mantenimiento.

AppDomain.TypeResolve (Evento)

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

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

public event ResolveEventHandler TypeResolve
/** @event */
public final void add_TypeResolve (ResolveEventHandler value)

/** @event */
public final void remove_TypeResolve (ResolveEventHandler value)

JScript admite el uso de eventos, pero no admite la declaración de eventos nuevos.

El evento TypeResolve se produce cuando Common Language Runtime no puede determinar el ensamblado capaz de crear el tipo solicitado. Éste puede ser el caso si el tipo está definido en un ensamblado dinámico o el tipo no está definido en un ensamblado dinámico pero el motor en tiempo de ejecución no sabe en qué ensamblado está definido el tipo. La última situación puede producirse cuando se llama al método Type.GetType con un nombre de tipo no contemplado por el nombre del ensamblado.

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

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

Para registrar un controlador de eventos para este evento, debe tener los permisos necesarios o se producirá una excepción SecurityException.

Para obtener más información sobre la forma de controlar eventos, vea Utilizar eventos.

En el ejemplo siguiente se muestra el evento TypeResolve.

Para que este ejemplo de código se ejecute, es necesario especificar el nombre completo del ensamblado. Para obtener información sobre la forma de obtener el nombre completo del ensamblado, 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".
 */

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium, Windows Mobile para Pocket PC, Windows Mobile para Smartphone, Windows Server 2003, Windows XP Media Center, Windows XP Professional x64, Windows XP SP2, Windows XP Starter Edition

.NET Framework no admite todas las versiones de cada plataforma. Para obtener una lista de las versiones admitidas, vea Requisitos del sistema.

.NET Framework

Compatible con: 2.0, 1.1, 1.0
Mostrar: