Cómo el motor en tiempo de ejecución ubica ensamblados

Para implementar la aplicación de .NET Framework correctamente, debe comprender la forma en que Common Language Runtime localiza y se enlaza a los ensamblados que forman la aplicación. De forma predeterminada, el motor en tiempo de ejecución intenta enlazarse con la versión exacta de un ensamblado con el que se compiló la aplicación. Este comportamiento predeterminado puede reemplazarse mediante la configuración de archivos de configuración.

Common Language Runtime lleva a cabo una serie de pasos cuando intenta ubicar un ensamblado y resolver una referencia a un ensamblado. Estos pasos se resumen en las siguientes secciones. La búsqueda de términos se utiliza con frecuencia cuando se describe el modo en que el motor en tiempo de ejecución localiza ensamblados; hace referencia al conjunto de técnicas heurísticas que se emplean para localizar el ensamblado y que se basan en el nombre y la referencia cultural del ensamblado.

NotaNota

Es posible ver la información de enlace en el archivo de registro mediante el Visor de registro de enlaces de ensamblados (Fuslogvw.exe), que se incluye en Kit de desarrollo de software de Windows (SDK).

Iniciar el enlace

El proceso de localización y enlace a un ensamblado comienza cuando el motor en tiempo de ejecución intenta resolver una referencia a otro ensamblado. Dicha referencia puede ser estática o dinámica. El compilador registra las referencias estáticas en los metadatos del manifiesto del ensamblado, en tiempo de generación. Las referencias dinámicas se construyen inmediatamente como resultado de las llamadas a varios métodos, como System.Reflection.Assembly.Load.

La manera más recomendable de hacer referencia a un ensamblado consiste en utilizar una referencia completa, incluidos el nombre del ensamblado, la versión, la referencia cultural y el símbolo (token) de clave pública si éste existe. El motor en tiempo de ejecución utilizará esta información para buscar el ensamblado, siguiendo los pasos que se describen más adelante en esta sección. El motor en tiempo de ejecución utiliza el mismo proceso de resolución, sin tener en cuenta si la referencia señala a un ensamblado estático o dinámico.

También se puede utilizar una referencia dinámica a un ensamblado proporcionando el método de llamada con sólo información parcial sobre el ensamblado, como especificar únicamente el nombre del ensamblado. En este caso, se buscará el ensamblado sólo en el directorio de la aplicación y no se realizará ninguna otra comprobación. Se realiza una referencia parcial utilizando cualquiera de los distintos métodos para cargar ensamblados como System.Reflection.Assembly.Load o System.AppDomain.Load.

Por último, se puede hacer una referencia dinámica mediante un método como System.Reflection.Assembly.Load y facilitar sólo información parcial; a continuación, se califica la referencia mediante el elemento <qualifyAssembly> en el archivo de configuración de la aplicación. Este elemento permite facilitar una información de referencia completa (nombre, versión, referencia cultural y, si existe, el símbolo (token) de clave pública) en el archivo de configuración de la aplicación en lugar del código. Utilice este técnica si desea asignar un nombre completo a una referencia a un ensamblado fuera del directorio de la aplicación o si desea hacer referencia a un ensamblado en la caché global de ensamblados pero opta por la comodidad de especificar la referencia completa en el archivo de configuración en lugar del código.

NotaNota

Este tipo de referencia parcial no debe utilizarse con ensamblados compartidos entre varias aplicaciones.Como los valores de configuración se aplican por cada aplicación y no por ensamblado, un ensamblado compartido que utilice este tipo de referencia parcial requerirá que cada aplicación que utilice el ensamblado compartido tenga la información calificada en su archivo de configuración.

El motor en tiempo de ejecución lleva a cabo los siguientes pasos para resolver una referencia a un ensamblado:

  1. Determina la versión de ensamblado correcta mediante el examen de los archivos de configuración aplicables, entre los que se incluyen el archivo de configuración de la aplicación, el archivo de directivas del editor y el archivo de configuración del equipo. Si el archivo de configuración se encuentra ubicado en un equipo remoto, el motor en tiempo de ejecución debe localizar y descargar el archivo de configuración de la aplicación antes de nada.

  2. Comprueba si el nombre de ensamblado ha estado enlazado anteriormente y, si es así, utiliza el ensamblado cargado previamente. Si anteriormente se produjo un error en una solicitud de carga del ensamblado, la solicitud dará error inmediatamente sin intentar cargar el ensamblado.

    NotaNota

    El almacenamiento en caché de errores de enlace del ensamblado es nuevo en la versión 2.0 de .NET Framework.

  3. Comprueba la caché global de ensamblados. Si el ensamblado se encuentra allí, el motor en tiempo de ejecución utiliza este ensamblado.

  4. Busca el ensamblado siguiendo estos pasos:

    1. Si la configuración y la directiva del editor no afectan a la referencia original y si la solicitud de enlace se creó utilizando el método Assembly.LoadFrom, el motor en tiempo de ejecución comprueba las sugerencias de ubicación.

    2. Si se encuentra un código base en los archivos de configuración, el motor en tiempo de ejecución sólo comprueba esta ubicación. Si esta búsqueda resulta fallida, el motor en tiempo de ejecución determina que la solicitud de enlace ha resultado errónea y cesan las búsquedas.

    3. Busca el ensamblado mediante las técnicas heurísticas descritas en la sección de búsqueda. Si tras la búsqueda no se encuentra el ensamblado, el motor en tiempo de ejecución solicita a Windows Installer que proporcione un ensamblado. Esto funciona como una característica de instalación a petición.

      NotaNota

      No se realiza ninguna comprobación de versiones de los ensamblados sin nombre seguro y el motor en tiempo de ejecución tampoco comprueba si estos ensamblados se encuentran en la caché global de ensamblados.

Vea también

Conceptos

Paso 1: Examinar los archivos de configuración

Paso 2: Comprobar los ensamblados a los que se hizo referencia previamente

Paso 3: Comprobar la Caché de ensamblados global

Paso 4: Ubicar el ensamblado a través de códigos base o sondeos

Referencias parciales a ensamblados

Implementar .NET Framework y aplicaciones