Compartir a través de


Referencias parciales a ensamblados

Una referencia completa a un ensamblado incluye el nombre de texto del ensamblado, la versión, la referencia cultural y el símbolo (token) de clave pública (si el ensamblado tiene un nombre seguro). Si se hace referencia a cualquier ensamblado que sea parte de Common Language Runtime o a cualquiera ubicado en la caché global de ensamblados, es necesaria una referencia completa a un ensamblado, También se puede hacer referencia dinámicamente a un ensamblado facilitando sólo información parcial, como especificar únicamente el nombre del ensamblado.

No se recomienda el uso de referencias parciales al ensamblado, porque puede conducir a diversos problemas de versión:

  • Algunas versiones del ensamblado podrían no ser compatibles con versiones anteriores. Por ejemplo, es posible que el código funcione con la versión 1.6 del ensamblado, pero debido a la referencia parcial al ensamblado podría obtener una versión posterior que tiene un cambio incompatible.

  • Algunas versiones del ensamblado podrían no ser compatibles con versiones anteriores. Por ejemplo, su código podría funcionar con la versión 1.6 del ensamblado, pero debido a la referencia parcial al ensamblado, podría obtener una versión anterior en la que falta código necesario.

  • Una aplicación que instala una nueva versión de un ensamblado puede interrumpir aplicaciones que utilizan las referencias parciales al ensamblado para cargar el ensamblado, si la nueva versión no es compatible.

Los problemas potenciales de versión son tan variados que el método LoadWithPartialName se ha marcado como obsoleto en la versión 2.0 de .NET Framework.

Hacer referencias parciales a ensamblados

Para hacer referencia parcial a un ensamblado en el código, sigo uno de estos procedimientos:

  • Utilice un método como System.Reflection.Assembly.Load y especifique sólo una referencia parcial. El motor en tiempo de ejecución comprueba la presencia del ensamblado en el directorio de la aplicación.

  • Utilice el método System.Reflection.Assembly.LoadWithPartialName y especifique sólo una referencia parcial. El motor en tiempo de ejecución comprueba la presencia del ensamblado en el directorio de la aplicación y en la caché global de ensamblados.

NotaNota

El método LoadWithPartialName se ha quedado obsoleto en la versión 2.0 de .NET Framework.

Si se utiliza el método LoadWithPartialName, se puede introducir variabilidad en el proceso de enlace. Por ejemplo, si se solicita un enlace a un ensamblado con un nombre seguro pero no se incluye en la referencia la clave pública, no existen garantías de que el ensamblado que se enlaza proceda del editor esperado. Además, las referencias que no incluyen el símbolo (token) de clave pública no están sometidas a la directiva de versiones, por lo que la aplicación y los archivos de configuración del equipo nunca se comprueban. Las referencias parciales que utilizan el método LoadWithPartialName obtienen los mejores resultados cuando se desea obtener la última versión de un ensamblado.

  • Use un método, como System.Reflection.Assembly.Load, y proporcione solo una referencia parcial; a continuación, proporcione la información de referencia completa en el archivo de configuración de la aplicación.

Referencias parciales mediante el método LoadWithPartialName

NotaNota

El método LoadWithPartialName se ha quedado obsoleto en la versión 2.0 de .NET Framework.

Una llamada al método LoadWithPartialName debe incluir al menos el nombre de texto del ensamblado, pero también puede incluir el símbolo (token) de clave pública, la versión o la referencia cultural. Como se utiliza un método que sólo espera una referencia parcial, no es necesario incluir la información de referencia completa (nombre, versión, referencia cultural y, si existe, el símbolo (token) de clave pública).

Cuando se hace referencia parcial a un ensamblado mediante el método LoadWithPartialName, el motor en tiempo de ejecución utiliza reglas específicas para buscar el ensamblado al que se hace referencia. Estas reglas son:

  1. El motor en tiempo de ejecución comprueba el archivo de configuración de la aplicación en busca de información calificada para la referencia en el elemento <qualifyAssembly>. Si se encuentra una entrada válida, se realiza el enlace como para cualquier otra referencia completa.

  2. A continuación, el motor en tiempo de ejecución busca en el directorio de la aplicación un ensamblado que coincida con el nombre de texto del ensamblado especificado. Si se encuentra un ensamblado que coincida, el motor en tiempo de ejecución lo utilizará.

  3. En caso contrario, el motor en tiempo de ejecución buscará el ensamblado en la caché global de ensamblados. Si se ha especificado el símbolo (token) de clave pública, la versión o la referencia cultural en la referencia parcial, el motor en tiempo de ejecución intentará que coincidan exactamente esos valores. Si no se ha especificado ninguna versión, el motor en tiempo de ejecución intentará buscar el ensamblado con el número de versión más reciente que coincida con los demás criterios especificados. Si no se ha especificado la referencia cultural o el símbolo (token) de clave pública, no quedará definido el comportamiento del motor en tiempo de ejecución.

    Por ejemplo, supongamos que se realiza la llamada a Assembly.LoadWithPartialName("math, Version 5.0.0.0") y el contenido de la caché global de ensamblados es éste:

    math,version=5.0.0.0,publicKeyToken=11111111,culture=de
    math,version=5.0.0.0,publicKeyToken=22222222,culture=en
    

    La llamada no tendrá un resultado definido. El motor en tiempo de ejecución seleccionará el primer ensamblado que encuentre.

    Otro ejemplo: supongamos que se realiza la llamada a Assembly.LoadWithPartialName("math") y el contenido de la caché global de ensamblados es éste:

    math,version=5.0.0.0,publicKeyToken=11111111,culture=neutral
    math,version=6.0.0.0,publicKeyToken=22222222,culture=neutral
    

    El resultado de la llamada es un enlace al ensamblado matemático, versión 6.0.0.0.

    Un último ejemplo: supongamos que se realiza una llamada a Assembly.LoadWithPartialName("math,publicKeyToken=11111111") y el contenido de la caché global de ensamblados es éste:

    math,version=5.0.0.0,publicKeyToken=11111111,culture=neutral
    math,version=6.0.0.0,publicKeyToken=22222222,culture=neutral
    

    El resultado de la llamada es un enlace al ensamblado matemático, versión 5.0.0.0.

Referencias parciales con información calificada

Se puede hacer una referencia dinámica mediante el método System.Reflection.Assembly.Load y facilitar sólo una referencia 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.

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 completa en su archivo de configuración.

Vea también

Conceptos

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

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