Cambios de Visual Studio 2010 para VC++ (parte 1)

Cambios de Visual Studio 2010 para VC++ (parte 1)

La nueva versión de Visual Studio, denominada Visual Studio 2010, viene con una serie de cambios para Visual C++. Esto incluye un nuevo sistema de compilación, un nuevo sistema de proyectos, objetivos múltiples, nuevo IntelliSense, soporte en MFC para nuevos controles, nuevas adiciones al compilador de C++ (que ya fueron aprobados para C++0x), nuevo modelo de implementación y otros. En esta publicación, hablaré sobre el nuevo sistema de compilación y la orientación múltiple.

Para mostrar los cambios, crearé dos proyectos simples, uno en Visual Studio 2008, llamado Wordpad 2008, y otro en Visual Studio 2010, llamado Wordpad 2010. Estas serían aplicaciones simples de documento único de MFC. La siguiente imagen muestra las dos soluciones abiertas en el Explorador de soluciones.

Como puede ver, ambas versiones contienen el mismo archivo de soluciones (solo difiere el sufijo en el nombre). La siguiente imagen muestra los archivos en el disco, en comparación con las dos soluciones.

Sistema MS-Build

Lo primero que hay que notar (aunque puede que no sea tan obvio) es que se modificó la extensión del archivo del proyecto. En Visual Studio 2008 se llama .vcproj, pero en Visual Studio 2010 se llama .vcxproj. No solo cambió la extensión, sino también el contenido del archivo. Esto se debe a que en Visual Studio 2010, el sistema de compilación de Visual C++ se cambió de VCBuild a MSBuild. Este motor de compilación ya se usó para los lenguajes destinados al marco .NET.

MSBuild utiliza archivos de proyecto XML y los elementos más importantes de un proyecto son:

  • Artículos :unidades de entrada en el sistema de compilación, agrupadas en colecciones de elementos, que se pueden usar como parámetros para las tareas, usando la sintaxis @(ItemCollectionName) . Ejemplos de elementos del proyecto Wordpad2010:
      < ItemGroup >
        < ClInclude Include="MainFrm.h" / >
        < ClInclude Include="Resource.h" / >
        < ClInclude Include="stdafx.h" / >
        < ClInclude Include="targetver.h" / >
        < ClInclude Include="Wordpad2010.h" / >
        < ClInclude Include="Wordpad2010Doc.h" / >
        < ClInclude Include="Wordpad2010View.h" / >
      < /ItemGroup >
    
  • Propiedades :pares de clave/valor utilizados para configurar las compilaciones. El valor de una propiedad se puede cambiar después de que se haya definido. Se pueden hacer referencia en el archivo del proyecto usando la sintaxis $(PropertyName) . Ejemplos de propiedades del proyecto Wordpad2010.
      < PropertyGroup Label="Globals" >
        < ProjectGuid >{1E7DC2AA-8CAC-44A8-98F6-DE69249AD30C}< /ProjectGuid >
        < RootNamespace >Wordpad2010< /RootNamespace >
        < Keyword >MFCProj< /Keyword >
      < /PropertyGroup >
    
  • Tareas :unidades reutilizables de código ejecutable utilizadas para realizar compilaciones. Un ejemplo de tareas puede ser compilar archivos de entrada, vincular, ejecutar herramientas externas. Las tareas se pueden reutilizar en diferentes proyectos.
  • Objetivos :representa agrupaciones de tareas en un orden particular y expone partes del archivo del proyecto como puntos de entrada al sistema de compilación.

Puede obtener una descripción general más detallada del motor MSBuild aquí.

Otra cosa a notar es la presencia de un archivo llamado Wordpad2010.vcxproj.filters. Este archivo define el árbol del explorador de soluciones con los archivos contenidos en el proyecto. Esto solía ser parte del proyecto de archivo, pero en Visual Studio 2010 se movió a un archivo separado. El motivo es mantener el archivo del proyecto solo para la construcción, no para la organización del proyecto.

La configuración específica del usuario solía almacenarse en un archivo llamado ProjectName .vcproj.nombre de usuario completamente calificado .usuario . Ahora hay un nuevo archivo llamado ProjectName .vcxproj.usuario .

Puede leer más sobre estos cambios en MSDN.

Objetivo múltiple

Visual Studio 2008 llegó a ser compatible con la orientación múltiple del marco .NET, no solo para C# y VB.NET, sino también para C++/CLI. Además de eso, Visual Studio 2010 viene con soporte para objetivos múltiples nativos.

La orientación múltiple administrada permite apuntar a diferentes versiones del marco .NET para aplicaciones de modo mixto. De forma predeterminada, la versión de destino es la última, 4.0. Esto solo se puede cambiar manualmente en el archivo del proyecto. El soporte para cambiar esto desde el IDE no estaba incluido en esta versión. En realidad, se eliminó porque en Visual Studio 2008 esto era posible.

  < PropertyGroup Label="Globals" >
    < ProjectGuid >{AB3D9231-F8B6-4EAD-A15B-C792977AB26E}< /ProjectGuid >
    < RootNamespace >MixedModeDemo< /RootNamespace >
    < TargetFrameworkVersion >v3.5< /TargetFrameworkVersion >
    < Keyword >MFCDLLProj< /Keyword >
  < /PropertyGroup >

La orientación múltiple nativa permite utilizar diferentes versiones de las herramientas y bibliotecas para crear proyectos C++ (nativos). Por supuesto, debe tener el conjunto de herramientas específico instalado en su máquina para poder hacerlo. Puede definir diferentes configuraciones que se dirijan a diferentes versiones de los conjuntos de herramientas. El conjunto de herramientas de destino se puede cambiar desde la página de propiedades del proyecto, General, Conjunto de herramientas de la plataforma. La siguiente imagen muestra las opciones disponibles en una máquina con Visual Studio 2008 SP1 y Visual Studio 2010 instalados uno al lado del otro.

Es posible apuntar a la versión anterior, 2008, 2005, 2003 y 2002. En teoría, es posible apuntar incluso a VC6, pero no hay soporte de Microsoft para eso.

Sugiero leer más sobre la orientación múltiple nativa aquí y sobre la orientación múltiple administrada, para aplicaciones de modo mixto, aquí.

En una próxima publicación hablaré sobre los cambios en IntelliSense y la experiencia de navegación.