Cómo el motor de 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 de tiempo de ejecución intenta enlazarse con la versión exacta de un ensamblado con el que se creó 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 de 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.

Nota   Es posible ver la información de enlace del archivo de registro mediante el Visor de registro de enlaces de ensamblados (Fuslogvw.exe), que se incluye en .NET Framework SDK.

Iniciar el enlace

El proceso de localización y enlace a un ensamblado comienza cuando el motor de 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 de 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 de 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 al utilizar cualquiera de los diversos métodos para cargar ensamblados como System.Reflection.Assembly.Load o AppDomain.Load. Si desea que el motor de tiempo de ejecución compruebe la caché de ensamblados global así como el directorio de la aplicación para ver si contienen un ensamblado al que se hace referencia, especifique una referencia parcial mediante el método System.Reflection.Assembly.LoadWithPartialName. Para obtener más información sobre el enlace parcial, vea Referencias a ensamblados parciales.

Por último, se puede hacer una referencia dinámica mediante el método 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é de ensamblados global pero opta por la comodidad de especificar la referencia completa en el archivo de configuración en lugar del código.

Nota   Este tipo de referencia parcial no debe utilizarse con ensamblados compartidos con 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 completa en su archivo de configuración.

El motor de 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 de 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.
  3. Comprueba la caché de ensamblados global. Si el ensamblado se encuentra allí, el motor de 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 petición de enlace se creó utilizando el método Assembly.LoadFrom, el motor de 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 de tiempo de ejecución sólo comprueba esta ubicación. Si esta búsqueda resulta fallida, el motor de tiempo de ejecución determina que la petición 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 de tiempo de ejecución solicita a Windows Installer que proporcione un ensamblado. Esto funciona como una característica de instalación a petición.

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

Vea también

Escenarios de implementación | Paso 1: Examinar los archivos de configuración | Paso 2: Comprobar los ensamblados a los que se ha hecho referencia previamente | Paso 3: Comprobar la caché de ensamblados global | Paso 4: Ubicar el ensamblado a través de códigos base o búsquedas | Referencias a ensamblados parciales | Implementar aplicaciones de .NET Framework