visual-c++ msbuild visual-studio-2012

visual c++ - ¿Cómo usar MSBuild para orientar el conjunto de herramientas de la plataforma v110?



visual-c++ visual-studio-2012 (6)

Asegúrese de que la parte superior de su archivo .SLN tenga .SLN aspecto:

Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 2012

Cuando hace doble clic en el archivo de la solución, es el # Visual Studio 2012 que controla qué versión de Visual Studio se carga (y controla el icono que se muestra en el Explorador de Windows).

Sin embargo, cuando ejecuta MSBuild , mira la parte Format Version 12.00 .

¿Confuso?

Esto es confuso, ya que Visual Studio 2010 es la versión 10.0 y Visual Studio 2012 es la versión 11.0 (no 12.0), y el uso del formato de archivo de la solución versión 12.0 hace que MSBuild (implícitamente) configure VisualStudioVersion en 11.0.

Estoy desarrollando una aplicación de línea de comandos que crea una solución completa de Visual Studio 11 hecha de un único proyecto de VC ++ y que intenta compilarla al final usando MSBuild.

El problema que estoy enfrentando es extraño.

Si ejecuto mi programa de línea de comando dentro de Visual Studio 11, funciona; si, en su lugar, lo lanzo fuera del entorno de desarrollo, me arroja el siguiente error:

C:/Program Files (x86)/MSBuild/Microsoft.Cpp/v4.0/Platforms/Win32/Microsoft.Cpp.Win32.Targets(511,5): error MSB8008: Specified platform toolset (v110) is not installed or invalid. Please make sure that a supported PlatformToolset value is selected. [f:/ABC.vcxproj]

El comando que estoy usando es el siguiente:

C:/Windows/Microsoft.NET/Framework/v4.0.30319/msbuild.exe f:/snake/W9A30040.vcxproj /property:PlatformToolset=v110;Configuration=Debug /v:quiet

Pero tengo la sensación de que PlatformToolset = v110 se ignora y MSBuild usa v100 (Visual Studio 2010).

¿Tiene alguna sugerencia sobre cómo decirle a MSBuild que compile para v110 Platform Toolset?


Comenzando con Visual Studio 2013, MSBuild ahora es parte de Visual Studio, y la ruta correcta debería ser $ (MSBuildToolsPath) ("C: / Archivos de programa (x86) / MSBuild / 12.0 / Bin"). Si usa msbuild.exe desde la carpeta .Net framework ("C: / Windows / Microsoft.NET / Framework64 / v4.0.30319"), no podrá distinguir las versiones vs2012 y vs2013.


Encontré una solución para este problema; podría ser un problema de Visual Studio 11 Beta que se resolverá antes del lanzamiento oficial.

De todos modos, si le interesa, simplemente configure la variable de entorno "VisualStudioVersion" igual a "11.0" antes de llamar a MSBuild.exe.

En archivos por lotes

set VisualStudioVersion=11.0

o en VB.NET

Environment.SetEnvironmentVariable("VisualStudioVersion", "11.0")


Microsoft proporciona un archivo por lotes para configurar todos los EnvVars. Lo encuentra en el menú Inicio bajo "Microsoft Visual Studio 2012 / Visual Studio Tools" o en la carpeta de Visual Studio ("C: / Archivos de programa (x86) / Microsoft Visual Studio 11.0 / Common7 / Tools / VsDevCmd.bat ")


También me encontré con el mismo problema con el lanzamiento completo de VS 2012. También puede establecer VisualStudioVersion como una propiedad con MSBuild en lugar de tratar con variables de entorno como se menciona en la respuesta aceptada. Por ejemplo:

C:/Windows/Microsoft.NET/Framework/v4.0.30319/MSBuild.exe ./myproject.vcxproj /p:VisualStudioVersion=11.0

El enfoque de las variables de entorno Estoy seguro de que funcionan igual de bien, sinceramente no lo intenté ya que estaba tratando de evitar modificar las variables de entorno.


Use las opciones basadas en el menú para hacer esto. Desde VC ++ 2010 Express: - Haga clic con el botón derecho en el archivo principal del proyecto (no en la solución misma en la parte superior del árbol). - Haz clic en General. - Encuentra Platform Toolset en el lado derecho del cuadro de diálogo, mitad superior. - Cambia de v110 a v100. - Haga clic en Aceptar.

----- Hecho ------