Referencias a ensamblados parciales
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é de ensamblados global, 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. Cuando se especifica una referencia parcial a un ensamblado, el motor de tiempo de ejecución sólo busca el ensamblado en el directorio de la aplicación.
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 de 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 de tiempo de ejecución comprueba la presencia del ensamblado en el directorio de la aplicación y en la caché de ensamblados global.
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.
Utilice el método System.Reflection.Assembly.Load y facilite sólo una referencia parcial; a continuación, facilite la información de referencia completa en el archivo de configuración de la aplicación.
Referencias parciales mediante el método LoadWithPartialName
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 de tiempo de ejecución utiliza reglas específicas para buscar el ensamblado al que se hace referencia. Estas reglas son:
El motor de tiempo de ejecución comprueba el archivo de configuración de la aplicación en busca de información necesaria para la referencia en el elemento <qualifyAssembly>. Si se encuentra una entrada válida, se realiza el enlace como para cualquier otra referencia completa.
A continuación, el motor de 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 de tiempo de ejecución lo utilizará.
En caso contrario, el motor de tiempo de ejecución buscará el ensamblado en la caché de ensamblados global. 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 de tiempo de ejecución intentará que coincidan exactamente esos valores. Si no se ha especificado ninguna versión, el motor de 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 de 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é de ensamblados global 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 de 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é de ensamblados global 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é de ensamblados global 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 necesaria
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.
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.
Vea también
Cómo el motor de tiempo de ejecución ubica ensamblados | 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