Comparteix a través de


bindingFailure MDA

Nota:

Este artículo es específico de .NET Framework. No se aplica a implementaciones más recientes de .NET, incluidas .NET 6 y versiones posteriores.

El bindingFailure asistente de depuración administrada (MDA) se activa cuando un ensamblado no se carga.

Síntomas

El código ha intentado cargar un ensamblado mediante una referencia estática o uno de los métodos del cargador, como Assembly.Load o Assembly.LoadFrom. El ensamblado no se carga y se produce una FileNotFoundException excepción o FileLoadException .

Causa

Se produce un error de enlace cuando el tiempo de ejecución no puede cargar un ensamblado. Un error de enlace puede ser el resultado de una de las situaciones siguientes:

  • Common Language Runtime (CLR) no encuentra el ensamblado solicitado. Hay muchas razones por las que esto puede ocurrir, como el ensamblado que no se está instalando o la aplicación no está configurada correctamente para encontrar el ensamblado.

  • Un escenario de problema común consiste en pasar un tipo a otro dominio de aplicación, lo que requiere que CLR cargue el ensamblado que contiene ese tipo en el otro dominio de aplicación. Es posible que no sea posible que el tiempo de ejecución cargue el ensamblado si el otro dominio de aplicación está configurado de forma diferente del dominio de aplicación original. Por ejemplo, los dos dominios de aplicación pueden tener valores de propiedad diferentes BaseDirectory .

  • El ensamblado solicitado está dañado o no es un ensamblado.

  • El código que intenta cargar el ensamblado no tiene los permisos de seguridad de acceso de código correctos para cargar ensamblados.

  • Las credenciales de usuario no proporcionan los permisos necesarios para leer el archivo.

Resolution

El primer paso es determinar por qué CLR no se pudo enlazar al ensamblado solicitado. Hay muchas razones por las que es posible que el entorno de ejecución no haya encontrado o que haya podido cargar el ensamblado solicitado, como los escenarios enumerados en la sección Causa. Se recomiendan las siguientes acciones para eliminar la causa del error de enlace:

  • Determine la causa mediante los datos proporcionados por el bindingFailure MDA:

    • Ejecute el Fuslogvw.exe (Visor de registros de enlace de ensamblados) para leer los registros de errores generados por el enlazador de ensamblados.

    • Determine si el ensamblado está en la ubicación solicitada. En el caso de los LoadFrom métodos y LoadFile , la ubicación solicitada se puede determinar fácilmente. En el caso del Load método , que se enlaza mediante la identidad del ensamblado, debe buscar ensamblados que coincidan con esa identidad en la ruta de acceso de sondeo de propiedades del BaseDirectory dominio de aplicación y la caché global de ensamblados.

  • Resuelva la causa en función de la determinación anterior. Las posibles opciones de resolución son las siguientes:

    • Instale el ensamblado solicitado en la caché global de ensamblados y llame a . Load para cargar el ensamblado por identidad.

    • Copie el ensamblado solicitado en el directorio de la aplicación y llame al Load método para cargar el ensamblado por identidad.

    • Vuelva a configurar el dominio de aplicación en el que se produjo el error de enlace para incluir la ruta de acceso del ensamblado cambiando la BaseDirectory propiedad o agregando rutas de acceso de sondeo privadas.

    • Cambie la lista de control de acceso del archivo para permitir que el usuario que ha iniciado sesión lea el archivo.

Efecto en el tiempo de ejecución

Este MDA no tiene ningún efecto en clR. Solo notifica datos sobre errores de enlace.

Salida

El MDA informa del ensamblado que no se pudo cargar, incluida la ruta de acceso solicitada o el nombre para mostrar, el contexto de enlace, el dominio de aplicación en el que se solicitó la carga y el motivo del error.

El nombre para mostrar o la ruta de acceso solicitada pueden estar en blanco si esos datos no están disponibles para CLR. Si la llamada que no se pudo realizar al Load método , es probable que el tiempo de ejecución no pueda determinar el nombre para mostrar del ensamblado.

Configuración

<mdaConfig>
  <assistants>
    <bindingFailure />
  </assistants>
</mdaConfig>

Ejemplo

En el ejemplo de código siguiente se muestra una situación que puede activar este MDA:

using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            // This call attempts to load a nonexistent assembly.
            // The call will throw a System.IO.FileNotFound exception
            // and cause the activation of the bindingFailure MDA
            // if it is registered.
            Assembly.Load("NonExistentAssembly");
        }
    }
}

Consulte también