web-dev-qa-db-fra.com

Comment utiliser MSBuild pour cibler les outils de la plate-forme v110?

Je développe une application en ligne de commande qui crée une solution complète Visual Studio 11 composée d'un seul projet VC++ et qui tente de la compiler à l'aide de MSBuild.

Le problème auquel je suis confronté est étrange. 

Si j'exécute mon programme en ligne de commande dans Visual Studio 11, cela fonctionne; si je le lance plutôt en dehors de l'environnement de développement, l'erreur est la suivante:

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]

La commande que j'utilise est la suivante:

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

Mais j’ai le sentiment que PlatformToolset = v110 est ignoré et que MSBuild utilise v100 (Visual Studio 2010).

Avez-vous des suggestions sur la façon de demander à MSBuild de compiler pour la plate-forme v110?

21
Drake

J'ai trouvé une solution de contournement pour ce problème; Il pourrait s'agir d'un problème de bêta de Visual Studio 11 qui sera résolu avant la publication officielle. 

Quoi qu'il en soit, si vous êtes intéressé, définissez la variable d'environnement "VisualStudioVersion" égale à "11.0" avant d'appeler MSBuild.exe.

Dans des fichiers batch

set VisualStudioVersion=11.0

ou en VB.NET

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

J'ai rencontré le même problème avec la version complète de VS 2012. Vous pouvez également définir VisualStudioVersion en tant que propriété avec MSBuild, par opposition à la gestion des variables d'environnement, comme indiqué dans la réponse acceptée. Par exemple:

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

L’approche des variables d’environnement fonctionne, je suis sûr, tout aussi bien. Je n’ai honnêtement pas essayé cela, j’essayais de ne pas avoir à modifier les variables d’environnement.

25
Spencer

Assurez-vous que le haut de votre fichier .SLN ressemble à ceci:

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

Lorsque vous double-cliquez sur le fichier de solution, c'est le # Visual Studio 2012 qui contrôle la version de Visual Studio chargée (et l'icône affichée dans l'Explorateur Windows).

Cependant, lorsque vous exécutez MSBuild, it regarde la partie Format Version 12.00.

Confus?

Cela est source de confusion, car Visual Studio 2010 est la version 10.0 et Visual Studio 2012 est la version 11.0 (et non 12.0) et l'utilisation du format de fichier de solution 12.0 oblige MSBuild à définir (implicitement) VisualStudioVersion à 11.0.

12
Roger Lipscombe

À partir de Visual Studio 2013, MSBuild fait maintenant partie de Visual Studio et le chemin correct doit être $ (MSBuildToolsPath) («C:\Program Files (x86)\MSBuild\12.0\Bin»). Si vous utilisez msbuild.exe à partir du dossier du framework .Net («C:\Windows\Microsoft .NET\Framework64\v4.0.30319»), il ne sera pas possible de distinguer les versions vs2012 et vs2013.

3
ThieuND

Utilisez les options du menu pour ce faire. De VC++ 2010 Express: - Cliquez avec le bouton droit de la souris sur le fichier principal du projet (et non sur la solution elle-même située tout en haut de l’arborescence) .- Cliquez sur Général .- Rechercher un jeu d’outils de plate-forme sur le côté droit de la boîte de dialogue, moitié supérieure .- Changer de v110 à v100 .- Cliquez sur OK.

----- Terminé ------

1
DaveT

Microsoft fournit un fichier de commandes pour définir tous les EnvVarsVous le trouvez dans le menu Démarrer sous "Outils Visual Studio 2012/Visual Studio" ou dans le dossier Visual Studio ("C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\Tools\VsDevCmd.bat ")

0
Thomas Trotzki