¿Le resultó útil esta página?
Sus comentarios sobre este contenido son muy importantes. Háganos saber su opinión.
¿Tiene comentarios adicionales?
Caracteres restantes: 1500
Redirigir versiones de ensamblado
Este artículo se tradujo de forma manual. Mueva el puntero sobre las frases del artículo para ver el texto original. Más información.
Traducción
Original

Redirigir versiones de ensamblado

Las referencias de enlace de tiempo de compilación se pueden redirigir a ensamblados de .NET Framework, ensamblados de terceros o ensamblados de la propia aplicación. Puede redirigir la aplicación para que use otra versión de un ensamblado de varias maneras: con la directiva de editor, con un archivo de configuración de la aplicación; o a través del archivo de configuración del equipo. En este artículo se explica la manera en que funciona el enlace de ensamblados en .NET Framework y cómo se puede configurar.

Este tema contiene las secciones siguientes.

Los enlaces a los ensamblados de .NET Framework a veces se redirigen mediante un proceso denominado unificación de ensamblado. .NET Framework está formado por Common Language Runtime y por, aproximadamente, dos docenas de ensamblados que componen la biblioteca de tipos. El motor en tiempo de ejecución trata los ensamblados de .NET Framework como una sola unidad. De forma predeterminada, cuando se inicia una aplicación, todas las referencias a tipos en el código que ejecuta el motor en tiempo de ejecución se dirigen a los ensamblados de .NET Framework que tengan el mismo número de versión que el motor en tiempo de ejecución cargado en un proceso. Las redirecciones que se producen con este modelo son el comportamiento predeterminado del motor en tiempo de ejecución.

Por ejemplo, si su aplicación hace referencia a los tipos en el espacio de nombres System.XML y se haya compilado con .NET Framework 4.5, contendrá referencias estáticas a un ensamblado de System.XML suministrado con la versión del runtime 4.5. Si desea redirigir la referencia del enlace de forma que señale al ensamblado de System.XML suministrado con .NET Framework 4, puede colocar la información de redirección en el archivo de configuración de la aplicación. Una redirección de enlace en un archivo de configuración para un ensamblado unificado de .NET Framework suprime la unificación en ese ensamblado.

Además, quizás desee redirigir manualmente el enlace de ensamblados para los ensamblados de terceros si hay varias versiones disponibles.

Los proveedores de ensamblados pueden dirigir aplicaciones a una versión más reciente de un ensamblado incluyendo un archivo de directivas del editor con el nuevo ensamblado. El archivo de directivas del editor, ubicado en la caché global de ensamblados, 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 2.0.2.222 a 2.0.3.000 y de la versión 2.0.2.321 a la versión 2.0.3.000 van en el mismo archivo, porque están asociadas a la versión 2.0. Sin embargo, una redirección de la versión 3.0.0.999 a la versión 4.0.0.000 va al archivo de la versión 3.0.999. Cada versión principal de .NET Framework tiene su propio archivo de directivas de editor.

Si hay un archivo de directivas del editor para un ensamblado, 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 los archivos de directivas del editor solo si el nuevo ensamblado es compatible con el ensamblado que se va a redirigir.

Puede omitir la directiva de editor para la aplicación especificando valores en el archivo de configuración de la aplicación, como se describe en la sección Omitir la directiva del publicador.

Hay algunas técnicas distintas para cambiar el comportamiento de enlace para su aplicación a través del archivo de configuración de la aplicación: puede editar manualmente el archivo, basarse en la redirección de enlace automática o bien, especificar el comportamiento de enlace omitiendo la directiva de editor.

7wd6ex19.collapse_all(es-es,VS.110).gifEditar manual el archivo de configuración de la aplicación

Puede editar manualmente el archivo de configuración de la aplicación para resolver problemas de ensamblado. Por ejemplo, si un proveedor libera una versión más reciente de un ensamblado que su aplicación usa sin proporcionar ninguna directiva de editor, porque no garantiza compatibilidad con versiones anteriores, puede hacer que la aplicación utilice la versión más reciente del ensamblado indicando la información de enlace del ensamblado en el archivo de configuración de la aplicación como se muestra a continuación.

<dependentAssembly>
        <assemblyIdentity name="someAssembly"
          publicKeyToken="32ab4ba45e0a69a1"
          culture="en-us" />

        <bindingRedirect oldVersion="7.0.0.0" newVersion="8.0.0.0" />
      </dependentAssembly>

7wd6ex19.collapse_all(es-es,VS.110).gifDepender en el redireccionamiento de enlace automático

A partir de Visual Studio 2013, las nuevas aplicaciones de escritorio destinadas a .NET Framework 4.5.1 usan el redireccionamiento de enlace automático. Esto significa que si dos componentes hacen referencia a distintas versiones del mismo ensamblado con nombre seguro, el runtime agrega automáticamente una redirección de enlace a la versión más reciente del ensamblado en el archivo de configuración de la aplicación de salida (app.config). Esta redirección invalida la unificación de ensamblados que podría producirse de otra manera. El archivo app.config de origen no se modifica. Por ejemplo, supongamos que la aplicación hace referencia directa a un componente de .NET Framework fuera de banda pero usa una biblioteca de terceros cuyo destino es una versión anterior del mismo componente. Cuando compila la aplicación, el archivo de configuración de la aplicación de salida se modifica para contener una redirección de enlace a la versión más reciente del componente. Si crea una aplicación web, recibirá una advertencia de compilación relacionada con el conflicto obligatorio que, a su vez, le dará la opción de agregar la redirección de enlace necesaria al archivo de configuración web de origen.

Si agrega manualmente redirecciones del enlace al archivo app.config de origen, en el tiempo de compilación, Visual Studio 2013 intentará unificar ensamblados en función de las redirecciones de enlace que se agregaron. Por ejemplo, supongamos que inserta el siguiente redireccionamiento de enlace para un ensamblado:

<bindingRedirect oldVersion="3.0.0.0" newVersion="2.0.0.0" />

Si otro proyecto de la aplicación hace referencia a la versión 1.0.0.0 del mismo ensamblado, la redirección de enlace automático agrega la siguiente entrada al archivo app.config de salida para unificar la aplicación en la versión 2.0.0.0 de este ensamblado:

<bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0" />

Puede habilitar la redirección de enlace automático si su aplicación tiene como destino versiones anteriores de .NET Framework en Visual Studio 2013. Puede invalidar este comportamiento predeterminado proporcionando información de redirección de enlace en el archivo app.config para cualquier ensamblado, o desactivar la característica de redirección del enlace. Para obtener información sobre la activación o desactivación de esta característica, vea Cómo: Habilitar y deshabilitar redireccionamiento de enlaces automático.

7wd6ex19.collapse_all(es-es,VS.110).gifOmitir la directiva del publicador

Puede invalidar la directiva del editor en el archivo de configuración de la aplicación si es necesario. Por ejemplo, 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 desea omitir la directiva de editor, agregue un elemento <publisherPolicy> al elemento <dependentAssembly> en el archivo de configuración de la aplicación y establezca el atributo aplicar en no, que reemplaza cualquier valor yes anterior.

<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. Si un ensamblado tiene un archivo de 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.

Puede haber casos excepcionales en que el administrador de un equipo desee que todas las aplicaciones de un equipo utilicen una versión concreta de un ensamblado. Por ejemplo, el administrador puede desear que todas las aplicaciones utilicen una versión concreta de un ensamblado porque esa versión resuelve una vulnerabilidad de seguridad. Si se redirige un ensamblado en el archivo de configuración del equipo, todas las aplicaciones de esa máquina que usen la versión antigua se dirigirán para que usen la nueva. El archivo de configuración del equipo reemplaza el archivo de configuración de la aplicación y el archivo de la directiva de editor. Este archivo se encuentra en el directorio %runtime install path%\Config. Normalmente, .NET Framework se instala en el directorio %drive%\Windows\Microsoft.NET\Framework.

Se utiliza el mismo formato XML para especificar redirecciones de enlace si está en el archivo de configuración de la aplicación, el archivo de configuración del equipo o el archivo de directivas del editor. Para redirigir una versión de ensamblado a otra, utilice el elemento <bindingRedirect>. El atributo oldVersion puede especificar una única versión de ensamblado o un intervalo de versiones. El atributo newVersion debe especificar una versión única. 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.

El ejemplo de código siguiente muestra una variedad de escenarios de redireccionamiento de enlace. El ejemplo especifica un redireccionamiento para un intervalo de versiones para myAssembly y un solo redireccionamiento de enlace para mySecondAssembly. El ejemplo también especifica que el archivo de directivas del editor no invalidarán los redireccionamientos de enlace para myThirdAssembly.

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

<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 app, 
          publisher policy, or machine configuration files. -->
        <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="3.0.0.0" />
      </dependentAssembly>
  <dependentAssembly>
        <assemblyIdentity name="mySecondAssembly"
          publicKeyToken="32ab4ba45e0a69a1"
          culture="en-us" />
             <bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
      <assemblyIdentity name="myThirdAssembly"
        publicKeyToken="32ab4ba45e0a69a1"
        culture="en-us" />
        <!-- Publisher policy can be set only in the app 
          configuration file. -->
        <publisherPolicy apply="no" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

7wd6ex19.collapse_all(es-es,VS.110).gif Limitar enlaces de ensamblados a una versión específica

Puede utilizar el atributo appliesTo en el elemento <assemblyBinding> de un archivo de configuración de la aplicación para redirigir referencias de vínculos 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.

Por ejemplo, para redirigir enlaces de ensamblados a la versión 3.5 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="v3.5">
    <dependentAssembly> 
      <!-- assembly information goes here -->
    </dependentAssembly>
  </assemblyBinding>
</runtime>

Debe escribir la información de redirección en orden de versión. Por ejemplo, escriba la información de redirección del ensamblado para ensamblados de .NET Framework 3.5 seguidos de ensamblados de .NET Framework 4.5. 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 3.5 de .NET Framework y otra referencia a un ensamblado de la versión 4 de .NET Framework, debe utilizar el patrón que se muestra en el siguiente pseudocódigo.

<assemblyBinding xmlns="..." appliesTo="v3.5 "> 
  <!—.NET Framework version 3.5 redirects here --> 
</assemblyBinding> 

<assemblyBinding xmlns="..." appliesTo="v4.0.30319"> 
  <!—.NET Framework version 4.0 redirects here --> 
</assemblyBinding> 

<assemblyBinding xmlns="..."> 
  <!-- redirects meant for all versions of the runtime --> 
</assemblyBinding>
Mostrar:
© 2015 Microsoft