Compartir a través de


Implementar componentes divididos en versiones

Para mostrar cómo se pueden configurar las aplicaciones para usar los componentes compartidos más recientes o que se sabe que son compatibles, debe instalar las dos versiones 2.0 de Reverser.dll en la caché de ensamblados, mediante el archivo Build.bat que utiliza la herramienta Caché de ensamblados global (Gacutil.exe):

gacutil.exe /i Reverser.dll

Después de instalar estos ensamblados de Reverser, puede examinar la caché de ensamblados si explora el directorio \WindowsDirectory\Assembly y utiliza la extensión shell del visor de caché:

Ahora está preparado para compilar el archivo ejecutable VerClient, para el que especificará la versión 2.0.0.0 del componente Reverser:

csc /reference:Stringer\Stringer.dll; 
...  Reverser_v2.0.0.0\Reverser.dll VerClient.cs

Cómo se mencionó en (3) Ruta de acceso para componentes privados y Directiva de enlace, la localización y enlace de ensamblados en tiempo de ejecución se puede controlar con un archivo de configuración de la aplicación. En particular, se puede utilizar la etiqueta BindingRedirect para redirigir la referencia a una versión diferente de un ensamblado de nombre seguro y pasar por alto la versión de la referencia original con esta versión más reciente. La opción siguiente indica que para cualquier referencia de ensamblado de la versión 2.0.0.0 a la 2.0.0.9, la versión que se debe utilizar en su lugar en tiempo de ejecución es la 2.0.1.0:

<bindingRedirect
   oldVersion="2.0.0.0-2.0.0.9" newVersion="2.0.1.0"
/>

Esto permite al administrador volver a configurar una aplicación sin tener que compilarla de nuevo.

El archivo VerClient.exe.config de ejemplo del subdirectorio 5_Versioned demuestra esta opción.

Lista 2. Archivo de configuración de VerClient.exe (VerClient.exe.config)

<configuration>   
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <probing privatePath="Stringer"/>
      <publisherPolicy apply="no"/>
      <dependentAssembly>
        <assemblyIdentity name="Reverser" 
            publicKeyToken="0038acc8beadf1e5"
            culture=""/>
        <publisherPolicy apply="no"/>
        <bindingRedirect oldVersion="2.0.0.0"
          newVersion="2.0.0.0"/>
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>  

Puesto que, deliberadamente, un método de un tipo en la versión 2.0.1.0 de Reverser.dll se hizo incompatible con el mismo método de la versión 2.0.0.0, se producirá un error si un cliente compatible con la versión 2.0.0.0 intenta llamar a esta última revisión. Al pasar de:

    newVersion="2.0.0.0"

a:

    newVersion="2.0.1.0"

Es posible demostrar este comportamiento, cuyo resultado es MissingMethodException. Normalmente, este mecanismo permite al administrador reparar una aplicación para que se siga ejecutando correctamente si se interrumpe debido a una instalación posterior de otra aplicación que utilizaba una versión diferente del mismo componente compartido.

Finalmente, cuando llegue el momento de borrar la aplicación, debería quitar los archivos de componentes compartidos de la caché de ensamblados:

gacutil /u reverser

Este mecanismo quita todas las versiones de un componente de la caché de ensamblados. Si el componente todavía se encuentra en la ruta de acceso privada de la aplicación o en un subdirectorio que tiene el mismo nombre que el componente, a partir de ese momento se cargará desde esa ubicación.

Vea también

Resumen de empaquetado e implementación | Apéndice A: Información adicional acerca del empaquetado y de la implementación | Apéndice B: Herramientas de empaquetado e implementación