Redirigir versiones de ensamblado

Cuando se genera una aplicación .NET Framework en una versión concreta de un ensamblado con nombre seguro, la aplicación utiliza esa versión del ensamblado en tiempo de ejecución. Sin embargo, en ocasiones puede que se desee ejecutar la aplicación con una versión más reciente del ensamblado. El archivo de configuración de la aplicación, el archivo de configuración del equipo o un archivo de directivas del editor pueden redirigir una versión de un ensamblado a otra. Para obtener información sobre cómo usa Common Language Runtime estos archivos para determinar la versión del ensamblado que se va a usar, vea Cómo el motor en tiempo de ejecución ubica ensamblados. Se puede usar la herramienta Configuración de .NET Framework (Mscorcfg.msc) para redirigir versiones de ensamblado en el nivel de la aplicación y en el nivel del equipo, o se puede editar directamente el archivo de configuración.

Nota

No se pueden redirigir versiones de ensamblados que no tienen nombre seguro. Common Language Runtime omite la versión de los ensamblados que no tienen nombre seguro.

Redirigir versiones de ensamblado mediante la directiva de editor

Los proveedores de ensamblados pueden indicar que las aplicaciones deben usar una versión más reciente de un ensamblado incluyendo un archivo de directivas del editor con el ensamblado actualizado. El archivo de directivas del editor, ubicado en la caché de ensamblados global, contiene valores de redirección de ensamblados.

Cada versión principal.secundaria de un ensamblado tiene su propio archivo de directivas de editor. Por ejemplo, las redirecciones de la versión 1.1.2.222 a la versión 1.1.3.000 y de la versión 1.1.2.321 a la versión 1.1.3.000 van en el mismo archivo. Sin embargo, una redirección de la versión 2.0.0.999 a la versión 3.0.0.000 va en otro archivo.

Si hay un archivo de directivas del editor, el tiempo de ejecución comprueba este archivo después de comprobar el manifiesto del ensamblado y el archivo de configuración de la aplicación. Los proveedores deben utilizar directivas del editor sólo si el nuevo ensamblado es compatible con el ensamblado que se va a redirigir.

Se puede omitir la directiva de editor especificando valores en el archivo de configuración de la aplicación.

Omitir la directiva de editor

Algunas versiones de ensamblados nuevas de las que se afirma que son compatibles con versiones anteriores pueden, a pesar de todo, interrumpir una aplicación. Si esto sucede, se puede usar el siguiente valor en el archivo de configuración de la aplicación para que el tiempo de ejecución omita la directiva de editor:

<publisherPolicy apply="no" />

Omita la directiva de editor para que los usuarios puedan ejecutar la aplicación sin interrupciones, pero asegúrese de informar del problema al proveedor del ensamblado. Una vez que un ensamblado tiene una directiva de editor, el proveedor debe garantizar que es compatible con versiones anteriores y que los clientes pueden usar la nueva tanto como sea posible.

Redirigir versiones de ensamblado en el nivel de la aplicación

Supongamos que el proveedor del ensamblado facilita una versión más reciente de un ensamblado que usa su aplicación, pero no proporciona una directiva de editor porque no desea garantizar que el nuevo ensamblado es compatible con la versión original. Se puede especificar que la aplicación utilice la nueva versión del ensamblado poniendo información de enlace de ensamblados en el archivo de configuración de la aplicación.

Redirigir versiones de ensamblado en el nivel del equipo

Puede haber casos excepcionales en que el administrador de un equipo desee que todas las aplicaciones del equipo utilicen una versión concreta de un ensamblado. Por ejemplo, se puede desear que todas las aplicaciones utilicen una versión concreta de un ensamblado porque resuelve un problema de seguridad. Si se redirige un ensamblado en el archivo de configuración del equipo, todas las aplicaciones que utilicen la versión antigua utilizarán la nueva. El archivo de configuración del equipo reemplaza el archivo de configuración de la aplicación y la directiva de editor.

Especificar enlace de ensamblados en archivos de configuración

El archivo de configuración de la aplicación, el archivo de configuración del equipo y el archivo de directivas del editor utilizan el mismo esquema XML para procesar la redirección de ensamblado.

Enlace de ensamblados

Especifique la información de un ensamblado ubicando información de cada ensamblado en un elemento <dependentAssembly>. El elemento <assemblyIdentity> contiene información que identifica un ensamblado. Puede haber más de un elemento <dependentAssembly> en el archivo de configuración, pero debe haber exactamente un elemento <assemblyIdentity> en cada elemento <dependentAssembly>.

Para enlazar un ensamblado, se debe especificar la cadena "urn:schemas-microsoft-com:asm.v1" con el atributo xmlns en la etiqueta <assemblyBinding>.

Especificar la directiva de editor

Para que el tiempo de ejecución omita la directiva de editor para un ensamblado concreto, ubique el elemento <publisherPolicy> en el elemento <dependentAssembly>. Para que el tiempo de ejecución omita la directiva de editor para todos los ensamblados que utiliza la aplicación, ponga este valor en el elemento <assemblyBinding>. También se puede usar la herramienta Configuración de .NET Framework (Mscorcfg.msc) para omitir la directiva de editor.

El valor predeterminado del atributo apply es yes. Si se establece el atributo apply en no, se reemplaza cualquier valor yes anterior. Por ejemplo, si apply se establece en no en el nivel de la aplicación, se omite cualquier valor apply específico del ensamblado, incluso si declara que el valor es yes. Así, el valor no es el único estado útil, ya que cambia el valor predeterminado.

Redirigir versiones de ensamblado

Para redirigir una versión a otra, utilice el elemento <bindingRedirect>. El atributo oldVersion puede especificar una única versión o un intervalo de versiones. Por ejemplo, <bindingRedirect oldVersion="1.1.0.0-1.2.0.0" newVersion="2.0.0.0"/> especifica que el tiempo de ejecución debe usar la versión 2.0.0.0 en lugar de las versiones del ensamblado comprendidas entre la 1.1.0.0 y la 1.2.0.0.

Ejemplo

En el siguiente ejemplo se muestra cómo se redirige una versión de myAssembly a otra y cómo se desactiva la directiva de editor para mySecondAssembly.

<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="myAssembly"
          publicKeyToken="32ab4ba45e0a69a1"
          culture="en-us" />
        <!-- Assembly versions can be redirected in application, 
          publisher policy, or machine configuration files. -->
        <bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
      <assemblyIdentity name="mySecondAssembly"
        publicKeyToken="32ab4ba45e0a69a1"
        culture="en-us" />
        <!-- Publisher policy can be set only in the application 
          configuration file. -->
        <publisherPolicy apply="no" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

Redirigir enlaces de ensamblados de .NET Framework

Puede utilizar el atributo appliesTo en el elemento <assemblyBinding> de un archivo de configuración de la aplicación para redirigir referencias a enlaces de ensamblados a una versión específica de .NET Framework. Este atributo opcional utiliza un número de versión de .NET Framework para indicar la versión a la que se aplica. Si se especifica el atributo appliesTo, el elemento <assemblyBinding> se aplica a todas las versiones de .NET Framework.

El atributo appliesTo apareció por primera vez en la versión 1.1 de .NET Framework; la versión 1.0 de .NET Framework pasa por alto este atributo. Esto significa que se aplican todos los elementos <assemblyBinding> cuando se utiliza la versión 1.0 de .NET Framework, aunque se especifique un atributo appliesTo.

Por ejemplo, para redirigir enlaces de ensamblados para la versión 1.0 del código de registro de ensamblados de .NET Framework, debe incluir el siguiente código XML en el archivo de configuración de la aplicación.

<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1" 
    appliesTo="v1.0.3705">
    <dependentAssembly> 
      <!-- assembly information goes here -->
    </dependentAssembly>
  </assemblyBinding>
</runtime>

Los elementos <assemblyBinding> tienen en cuenta el orden. Debe especificar primero la información de redirección del enlace de ensamblados para cualquier ensamblado de la versión 1.0 de .NET Framework, seguida de la información de redirección del enlace de ensamblados para cualquier ensamblado de la versión 1.1 de .NET Framework. Por último, escriba la información de redirección del enlace de ensamblados para cualquier redirección de ensamblados que no utilice el atributo appliesTo y que, por tanto, se aplique a todas las versiones de .NET Framework. En caso de que se produzca un conflicto en la redirección, se utiliza la primera instrucción de redirección coincidente del archivo de configuración.

Por ejemplo, para redirigir una referencia a un ensamblado de la versión 1.0 de .NET Framework y otra referencia a un ensamblado de la versión 1.1 de .NET Framework, debe utilizar el modelo que se muestra en el siguiente pseudocódigo.

<assemblyBinding xmlns="..." appliesTo="v1.0.3705"> 
  <!—.NET Framework version 1.0 redirects here --> 
</assemblyBinding> 

<assemblyBinding xmlns="..." appliesTo="v1.1.5000"> 
  <!—.NET Framework version 1.1 redirects here --> 
</assemblyBinding> 

<assemblyBinding xmlns="..."> 
  <!-- redirects meant for all versions of the runtime --> 
</assemblyBinding>

Vea también

Tareas

Cómo: Crear una directiva de edición

Referencia

Esquema de la configuración de Common Language Runtime

Conceptos

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

Otros recursos

Ensamblados en Common Language Runtime
Programar con ensamblados
Archivos de configuración
Configurar aplicaciones
Esquema de los archivos de configuración de .NET Framework