Compartir a través de


Especificar versiones concretas de .NET Framework con MSBuild

Actualización: noviembre 2007

Visual Studio 2008 y MSBuild 3.5 permiten especificar varias versiones de .NET Framework (2.0, 3.0 y 3.5) al crear o generar proyectos. Esta característica se llama destinos múltiples. En MSBuild, los destinos múltiples se utilizan mediante un atributo nuevo, denominado ToolsVersion, en Elemento Project (MSBuild).

Conjuntos de herramientas, versiones de .NET Framework de destino y versiones de herramientas

Para entender cómo trabaja MSBuild con Visual Studio 2008, debe conocer la diferencia entre un conjunto de herramientas y una versión de .NET Framework de destino y cómo se relaciona cada uno con el nuevo atributo ToolsVersion. Todos ellos se utilizan para determinar la manera en que MSBuild 3.5 genera los proyectos.

Conjunto de herramientas

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 3.5 se puede utilizar con las versiones 2.0 y 3.0 del .NET Framework de destino. Sin embargo, el conjunto de herramientas de la versión 2.0 sólo se puede utilizar con la versión 2.0 del .NET Framework de destino.

Visual Studio 2008 instala .NET Framework 3.5, que incluye dos conjuntos de herramientas predefinidos: uno para .NET Framework 2.0 y otro para .NET Framework 3.5. No hay ningún conjunto de herramientas definido para .NET Framework 3.0, incluido en Windows Vista. El conjunto de herramientas de .NET Framework 2.0 sólo se puede especificar para .NET Framework 2.0, pero el conjunto de herramientas de .NET Framework 3.5 se puede especificar para las versiones 2.0, 3.0 o 3.5 de .NET Framework.

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.

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 generado su proyecto. Es necesario porque habilita características del compilador exclusivas de esa versión de .NET Framework 2.0 o hace referencia a los ensamblados que sólo se distribuyen en esa versión de .NET Framework.

Actualmente, hay tres versiones de .NET Framework disponibles para su uso en Visual Studio 2008:

  • .NET Framework 2.0 (incluida en Visual Studio).

  • .NET Framework 3.0 (incluida en Windows Vista).

  • .NET Framework 3.5 (incluida en Visual Studio 2008).

Aunque hay tres versiones de .NET Framework diferentes, todas las versiones están basadas en la misma versión 2.0 de Common Language Runtime (CLR) incluida en Visual Studio 2005.

La versión de .NET Framework de destino se especifica en el archivo de proyecto mediante la propiedad TargetFrameworkVersion. Visual Studio establece este valor al modificar la versión de .NET Framework de destino a través del entorno de desarrollo integrado (IDE). (Para obtener más información, vea Cómo: Especificar una versión concreta de .NET Framework). Los valores posibles para TargetFrameworkVersion son v2.0, v3.0 y v3.5. Se especifica como una propiedad de MSBuild, como:

<TargetFrameworkVersion>v2.0</TargetFrameworkVersion>

Atributo ToolsVersion

El atributo ToolsVersion puede especificar la versión del conjunto de herramientas en Elemento Project (MSBuild), en el archivo de proyecto. El ejemplo siguiente indica que el proyecto debe generarse utilizando el conjunto de herramientas de .NET Framework 2.0 2.0:

<Project ToolsVersion="2.0" ... </Project>

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

Diferencias entre las versiones de .NET Framework

Las tres versiones de .NET Framework están basadas en la versión 2.0 de CLR. Las versiones de .NET Framework difieren entre sí en la lista de ensamblados de que dispone cada una para hacer referencia a ellos en sus proyectos. Por ejemplo, LINQ es una nueva tecnología que está incluida en Visual Studio 2008. ..NET Framework 3.5 es la única versión de .NET Framework que tiene ensamblados relacionados con LINQ. Por consiguiente, no puede utilizar LINQ a menos que su proyecto esté destinado específicamente a .NET Framework 3.5. De forma similar, Windows Vista incluye Windows Presentation Foundation (WPF). No puede generar aplicaciones de WPF a menos que su proyecto esté destinado a .NET Framework 3.0 y versiones posteriores de .NET Framework.

Para obtener más información, vea Configuraciones de conjuntos de herramientas estándar y personalizados.

Cómo buscan los proyectos los conjuntos de herramientas

Visual Studio 2008 necesita un conjunto de herramientas para crear un proyecto. MSBuild busca los destinos y tareas mediante la propiedad $(MSBuildToolsPath). Por ejemplo, MSBuild busca el archivo Microsoft.CSharp.targets utilizando el elemento XML siguiente:

<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> 

Microsoft.CSharp.targets es un ejemplo de un proceso de compilación específico del lenguaje utilizado por Visual Studio 2008 para generar proyectos de Visual C#. $(MSBuildToolsPath) se resuelve como la ruta de acceso de la versión adecuada de .NET Framework donde está instalado Microsoft.CSharp.targets (por ejemplo, C:\Windows\Microsoft.Net\Framework\v2.0.50727).

Antes de que el conjunto de herramientas de MSBuild 3.5 pueda generar este proyecto, debe resolver $(MSBuildToolsPath) como la ubicación de instalación de MSBuild 3.5 para que el conjunto de herramientas importe la versión para Visual Studio 2008 de Microsoft.CSharp.targets.

En función de la versión de herramientas, $(MSBuildToolsPath) obtiene un valor diferente, haciendo que se importe un conjunto de herramientas diferente según el valor de ToolsVersion. Este sistema flexible permite que el proyecto, host MSBuild o usuario especifiquen el conjunto de herramientas con el que debe generarse un proyecto, y también especifica la manera en que MSBuild utilizará la información de la ubicación para escoger el conjunto de herramientas.

Cómo funciona el atributo ToolsVersion

Al crear un nuevo proyecto, o actualizar un proyecto existente en Visual Studio 2008, se incluye automáticamente un atributo denominado ToolsVersion en el archivo de proyecto y se establece con un valor predeterminado de "3.5". Para obtener más información, vea Especificar una versión concreta de .NET Framework.

Cuando se define un valor de ToolsVersion en un archivo de proyecto, MSBuild lo utiliza para determinar los valores de $(MSBuildToolsPath) (o $(MSBuildBinPath)), que es la ruta de acceso de las herramientas de MSBuild. Si no se define un valor de ToolsVersion, MSBuild continúa utilizando la ruta de acceso anterior del conjunto de herramientas porque supone se trata de un proyecto de Visual Studio 2005.

Si abre un proyecto de Visual Studio 2005 existente en Visual Studio 2008, el proyecto se actualiza físicamente para incluir "ToolsVersion=3 .5", ya que Visual Studio 2008 sólo permite la compilación con los conjuntos de herramientas de la versión 3.5. Como resultado, al generar el proyecto en Visual Studio 2008, utilizará el conjunto de herramientas de Visual Studio 2008 (3.5) en lugar del conjunto de herramientas de Visual Studio (2.0).

Los proyectos creados con los conjuntos de herramientas de la versión 2.0 se pueden especificar para .NET Framework 2.0 y los proyectos creados con los conjuntos de herramientas de la versión 3.5 se pueden especificar para las versiones 2.0, 3.0 o 3.5 de .NET Framework. Aunque un proyecto Visual Studio haya migrado a Visual Studio 2008 y se haya actualizado para utilizar el conjunto de herramientas de la versión 3.5, la versión de .NET Framework de destino del proyecto continuará siendo .NET Framework 2.0. Este diseño garantiza que al migrar su proyecto a Visual Studio 2008, no se introducirán nuevas dependencias. El proyecto continúa generándose exactamente igual que en Visual Studio.

Nota:

Si ya se ha definido el valor de ToolsVersion en un proyecto, Visual Studio 2008 no cambiará su valor. Se puede invalidar el valor de ToolsVersion. Para obtener más información, vea Invalidar el valor de la versión de herramientas.

Compatibilidad para Visual Studio 2005 y MSBuild 3.5

Visual Studio 2005 no puede abrir ni generar proyectos de Visual Studio 2008 ni proyectos actualizados a Visual Studio 2008. Sin embargo, el conjunto de herramientas de MSBuild 2.0 podría generar sus proyectos de Visual Studio 2008 si no ha utilizado funcionalidades nuevas específicas del conjunto de herramientas de Visual Studio 2008, como LINQ, nuevas características de sintaxis de Visual C# 2008 o Visual Basic 2008, etc.

Vea también

Conceptos

Invalidar el valor de la versión de herramientas

Configuraciones de conjuntos de herramientas estándar y personalizados