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.AssemblyResolve

 

Publicado: octubre de 2016

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

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

public event ResolveEventHandler AssemblyResolve

Es responsabilidad de la ResolveEventHandler para este evento devolver el ensamblado especificado por el ResolveEventArgs.Name propiedad, o para devolver null si no se reconoce el ensamblado. El ensamblado deben cargarse en un contexto de ejecución; Si se carga en el contexto de solo reflexión, se produce un error en la carga que produjo este evento.

Para obtener instrucciones sobre el uso de este evento, vea Resolver cargas de ensamblado.

A partir del .NET Framework 4, el ResolveEventArgs.RequestingAssembly propiedad devuelve el ensamblado que solicitó la carga de ensamblado que no se puede resolver. Por ejemplo, el cargador puede no se puede cargar una dependencia del ensamblado que realiza solicitud porque el ensamblado para solicitar y su dependencia no están en la ruta de acceso de búsqueda. Conocer la identidad del ensamblado que realiza solicitud podría ser útil para localizar la dependencia o para identificar la versión correcta, si hay más de una versión de la dependencia. Para obtener más información, consulta ResolveEventArgs.RequestingAssembly.

System_CAPS_importantImportante

A partir del .NET Framework 4, el ResolveEventHandler evento se desencadena para todos los ensamblados, incluidos los ensamblados de recursos. En versiones anteriores, no se generó el evento para ensamblados de recursos. Si se localiza el sistema operativo, el controlador puede llamarse varias veces: una vez para cada referencia cultural de la cadena de reserva.

Para este evento, el ResolveEventArgs.Name propiedad devuelve el nombre del ensamblado antes de que se aplica la directiva.

System_CAPS_importantImportante

Si más de un controlador de eventos está registrado para este evento, el evento handlersarecalled en orden hasta que un controlador de eventos devuelve un valor que no es null. Se omiten los siguientes controladores de eventos.

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

El ejemplo siguiente se muestra el AssemblyResolve 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.

public class MyType
{
    public MyType()
    {
        Console.WriteLine();
        Console.WriteLine("MyType instantiated!");
    }
}

class Test
{
    public static void Main()
    {
        AppDomain currentDomain = AppDomain.CurrentDomain;

        // This call will fail to create an instance of MyType since the
        // assembly resolver is not set
        InstantiateMyTypeFail(currentDomain);

        currentDomain.AssemblyResolve += new ResolveEventHandler(MyResolveEventHandler);

        // This call will succeed in creating an instance of MyType since the
        // assembly resolver is now set.
        InstantiateMyTypeFail(currentDomain);

        // This call will succeed in creating an instance of MyType since the
        // assembly name is valid.
        InstantiateMyTypeSucceed(currentDomain);
    }

    private static void InstantiateMyTypeFail(AppDomain domain)
    {
        // Calling InstantiateMyType will always fail since the assembly info
        // given to CreateInstance is invalid.
        try
        {
            // You must supply a valid fully qualified assembly name here.
            domain.CreateInstance("Assembly text name, Version, Culture, PublicKeyToken", "MyType");
        }
        catch (Exception e)
        {
            Console.WriteLine();
            Console.WriteLine(e.Message);
        }
    }

    private static void InstantiateMyTypeSucceed(AppDomain domain)
    {
        try
        {
            string asmname = Assembly.GetCallingAssembly().FullName;
            domain.CreateInstance(asmname, "MyType");
        }
        catch (Exception e)
        {
            Console.WriteLine();
            Console.WriteLine(e.Message);
        }
    }

    private static Assembly MyResolveEventHandler(object sender, ResolveEventArgs args)
    {
        Console.WriteLine("Resolving...");
        return typeof(MyType).Assembly;
    }
}

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