Share via


Compatibilidad con múltiples versiones de MSBuild

Con Visual Studio, puede compilar una aplicación para que se ejecute en cualquiera de las versiones de .NET Framework. Por ejemplo, puede compilar una aplicación para que se ejecute en .NET Framework versión 2.0 y compilarla para que también se ejecute en .NET Framework versión 4. La capacidad de compilar para más de una versión de Framework se denomina multitargeting.

Nota

Visual Studio se ejecuta bajo la versión más actual de .NET Framework instalada en el equipo de desarrollo.

Estas son algunas de las ventajas de la compatibilidad con múltiples versiones (multi-targeting):

  • Puede desarrollar aplicaciones que tienen como destino versiones anteriores de .NET Framework, por ejemplo, las versiones 2.0, 3.0 y 3.5.

  • Puede tener como destino marcos distintos de .NET Framework, por ejemplo, Silverlight.

  • Puede tener como destino un perfil de Framework, que es un subconjunto predefinido de una versión de .NET Framework de destino.

  • Si se publica algún service pack para .NET Framework versión 4, podría utilizarlo como destino.

  • El multitargeting garantiza que una aplicación utilice solo la funcionalidad que está disponible en la versión de .NET Framework de destino.

La versión de .NET Framework de destino es la versión concreta de .NET Framework para la que se ha compilado su proyecto. Es necesaria porque habilita características del compilador exclusivas de esa versión de .NET Framework 2.0 o hace referencia a los ensamblados que solamente se incluyen en esa versión de .NET Framework.

Al compilar una aplicación para que tenga como destino una versión concreta, debe coordinar estos tres conjuntos de componentes de software:

  • Conjunto de herramientas, que contiene los compiladores, las tareas y los destinos que se utilizan para crear la aplicación.

  • Ensamblados de referencia, que se utilizan para diseñar y compilar la aplicación.

  • Ensamblados en tiempo de ejecución, que se utilizan para ejecutar la aplicación.

Conjunto de herramientas (ToolsVersion)

Un conjunto de herramientas es un conjunto coincidente de tareas de MSBuild, destinos de MSBuild y herramientas que se instala con MSBuild y .NET Framework. Un conjunto de herramientas incluye compiladores como csc.exe y vbc.exe, el archivo de destinos comunes (microsoft.common.targets) y el archivo de tareas comunes (microsoft.common.tasks). El conjunto de herramientas de la versión 4.0 se puede usar con las versiones 2.0, 3.0, 3.5 o 4 de .NET Framework de destino. Sin embargo, el conjunto de herramientas de la versión 2.0 solo se puede usar con la versión 2.0 de .NET Framework de destino.

Para designar la herramienta, defina el atributo ToolsVersion del elemento Project de un archivo de proyecto, por ejemplo,

<Project ToolsVersion="4.0" ...

Puede usar la versión 4.0 del conjunto de herramientas para compilar aplicaciones que se ejecutarán en una variedad de versiones de .NET Framework de destino siempre que se instale un paquete de destino por cada versión que desee usar. Para obtener más información, vea "Paquetes de destino", más adelante en este tema.

También puede crear sus propios conjuntos de herramientas personalizados. Para obtener más información, vea Configuraciones de conjuntos de herramientas estándar y personalizados.

Nota

Visual Studio no incluye una interfaz de usuario para cambiar la herramienta establecida.

Ensamblados de referencia

Normalmente, los marcos tienen asociados los ensamblados de referencia. Un ensamblado de referencia es un ensamblado simplificado que no tiene código y que se expone sólo a los tipos y miembros públicos.

En tiempo de diseño y de compilación, Visual Studio utiliza los ensamblados de referencia para la versión de .NET Framework de destino como filtros para poner a disposición únicamente los tipos y miembros que son compatibles con esa versión. Por ejemplo, cuando la versión de destino de .NET Framework es la 3.5, los tipos y los miembros que se proporcionan para .NET Framework 4 únicamente no se muestran en los diseñadores de Visual Studio, como la pestaña .NET del cuadro de diálogo Agregar referencia, y no están disponibles en el proceso de compilación.

Por ejemplo, LINQ es una nueva tecnología que se incluye en Visual Studio 2008. .NET Framework 3.5 es la única versión de .NET Framework que tiene ensamblados relacionados con LINQ. Por tanto, no puede usar LINQ a menos que su proyecto esté destinado específicamente a .NET Framework 3.5 o versiones posteriores. De forma similar, Windows Vista incluye Windows Presentation Foundation (WPF). No puede compilar aplicaciones de WPF a menos que su proyecto esté destinado a .NET Framework 3.0 o versiones posteriores de .NET Framework.

Paquetes de destino

Los ensamblados de referencia están disponibles cuando se instala el paquete de destino correspondiente. Un paquete de destino contiene los ensamblados de referencia y un archivo FrameworkList.xml que contiene una lista de todos ellos. El archivo FrameworkList.xml también se conoce como lista de redistribuciones (redist).

Los paquetes de destino están disponibles en estas fuentes:

  • Los paquetes de destino para .NET Framework 2.0, 3.0 y 3.5 están incluidos en .NET Framework versión 3.5 SP1.

  • Los paquetes del destino para el perfil de cliente de .NET Framework versión 3.5, .NET Framework versión 4 y perfil del cliente de la versión 4, y Silverlight están incluidos en Visual Studio.

Normalmente, los paquetes de destino se instalan en \Archivos de programa (x86) \Reference Assemblies\Microsoft\Framework. El paquete de destino para .NET Framework versión 2.0 se instala normalmente en la carpeta \Windows\Microsoft.NET\Framework\v2.0.50727\.

Al compilar una solución o proyecto en la línea de comandos, si se especifica el atributo ToolsVersion en msbuild.exe, todos los proyectos y las dependencias entre proyectos se compilarán de acuerdo con esa versión de herramientas, aunque cada proyecto de la solución especifique su propio atributo ToolsVersion en Elemento Project (MSBuild).

Ensamblados en tiempo de ejecución

No se puede establecer una versión de .NET Framework de destino en Visual Studio a menos que se instale el paquete de destino correspondiente. Por ejemplo, si la versión de destino es .NET Framework 3.0, se deben instalar sus ensamblados de referencia y los ensamblados compatibles. En tiempo de ejecución, el cargador Fusion de Common Language Runtime (CLR) enlaza la aplicación a los ensamblados en tiempo de ejecución del marco que tiene como destino.

Seleccionar una versión de .NET Framework de destino

Para seleccionar una versión de .NET Framework de destino para un proyecto existente

  1. En el Explorador de soluciones, haga clic con el botón secundario en el nodo del proyecto y, a continuación, haga clic en Propiedades.

  2. En la pestaña Aplicación, en la lista Versión de .NET Framework de destino, seleccione una versión. Solo se muestran en la lista las que tienen un paquete de destino instalado.

    Visual Studio utiliza la selección para establecer los valores de estos tres elementos en el archivo de proyecto:

    • El elemento TargetFrameworkIdentifier denomina la versión de .NET Framework de destino, por ejemplo,

      <TargetFrameworkIdentifier>Silverlight</TargetFrameworkIdentifier>

      Si falta este elemento, el valor predeterminado es ".NETFramework".

    • El elemento TargetFrameworkVersion denomina el número de versión de .NET Framework de destino, por ejemplo,

      <TargetFrameworkVersion>v3.0</TargetFrameworkVersion>

    • El elemento TargetFrameworkProfile denomina el perfil de la versión de .NET Framework de destino, por ejemplo,

      <TargetFrameworkProfile>Client</TargetFrameworkVersion>

      Si falta este elemento, el marco completo es el destino.

    Los destinos comunes del sistema de compilación de Visual Studio combinan estos tres elementos para formar un identificador conocido como el moniker de la versión de .NET Framework de destino (TFM).

Escenario: Visual Studio tiene como destino .NET Framework versión 3.5

Suponga que Visual Studio se está ejecutando en .NET Framework versión 4. Para elegir como destino .NET Framework versión 3.5, debe tener los ensamblados de referencia y de tiempo de ejecución asociados instalados. Estos ensamblados están incluidos en .NET Framework versión 3.5 SP1.

En este escenario, los diseñadores de Visual Studio muestran lo que filtran los ensamblados de referencia de .NET Framework versión 3.5 y el proyecto se compila con esos ensamblados de referencia. Al ejecutar el proyecto, se ejecuta en los ensamblados en tiempo de ejecución de .NET Framework versión 3.5, que a su vez se ejecutan en la versión 2.0 de CLR.

Al implementar la aplicación en otro equipo, debe tener .NET Framework versión 3.5 instalado. Puede comprobar si la versión 3.5 se encuentra en el equipo de destino, e instalarla si se requiere, utilizando un paquete de redistribución conveniente (redist).

Escenario dos: Visual Studio se ejecuta en .NET Framework versión 4.1 y tiene como destino .NET Framework versión 4

Suponga que dispone de .NET Framework versión 4.1 y que la versión 4 y la versión 4.1 se ejecutan en la versión 4 de CLR. Si se instala .NET Framework versión 4.1, Visual Studio se ejecutaría automáticamente en esa versión.

En un proyecto que tiene como destino .NET Framework versión 4, los ensamblados de referencia de la versión 4 filtrarían los tipos y miembros que están disponibles en los diseñadores de Visual Studio, el proyecto se compilaría con esos ensamblados de referencia y la aplicación resultante se ejecutaría en los ensamblados en tiempo de ejecución de la versión 4.

Vea también

Conceptos

Conceptos avanzados de MSBuild

Otros recursos

Resolver ensamblados en tiempo de diseño

Historial de cambios

Fecha

Historial

Motivo

Agosto de 2010

Se ha combinado el uso de MSBuild para usar como destino versiones específicas de .NET Framework en este tema.

Mejora de la información.