Ler en inglés

Compartir por


AppDomain.AssemblyResolve Evento

Definición

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

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

Tipo de evento

Implementaciones

Atributos

Ejemplos

En el ejemplo siguiente se muestra el AssemblyResolve evento .

Para que se ejecute este ejemplo de código, debe proporcionar el nombre completo del ensamblado. Para obtener información sobre cómo obtener el nombre completo del ensamblado, vea Nombres de ensamblado.

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

class AssemblyResolveSnippet
{
    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;
    }
}

Comentarios

Es responsabilidad de ResolveEventHandler este evento devolver el ensamblado especificado por la ResolveEventArgs.Name propiedad o devolver null si no se reconoce el ensamblado. El ensamblado debe 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 provocó este evento.

Para obtener instrucciones sobre el uso de este evento, consulte Resolución de cargas de ensamblado.

A partir de .NET Framework 4, la ResolveEventArgs.RequestingAssembly propiedad devuelve el ensamblado que solicitó la carga del ensamblado que no se pudo resolver. Por ejemplo, es posible que el cargador no pueda cargar una dependencia del ensamblado solicitante porque el ensamblado solicitante y su dependencia no están en la ruta de acceso de sondeo. Conocer la identidad del ensamblado de solicitud puede ser útil para buscar la dependencia o para identificar la versión correcta, si hay más de una versión de la dependencia disponible. Para obtener más información, vea ResolveEventArgs.RequestingAssembly.

Importante

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

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

Importante

Si se registra más de un controlador de eventos para este evento, se llama a los controladores de eventos en orden hasta que un controlador de eventos devuelve un valor que no nulles . Se omiten los controladores de eventos posteriores.

Para obtener más información sobre el manejo de eventos, consulte controlar y provocar eventos.

Se aplica a

Produto Versións
.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

Consulte también