Comment utiliser MSBuild pour cibler les outils de la plateforme v110?
je développe une application en ligne de commande qui crée une solution complète Visual Studio 11 faite d'un seul projet VC++ et qui essaie de la compiler à la fin en utilisant MSBuild.
le problème auquel je fais face est étrange.
si j'exécute mon programme en ligne de commande à L'intérieur de Visual Studio 11, Il fonctionne; si je le lance à la place en dehors de l'environnement de développement, il me lance l'erreur:
C:Program Files (x86)MSBuildMicrosoft.Cppv4.0PlatformsWin32Microsoft.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 suivantes:
C:WindowsMicrosoft.NETFrameworkv4.0.30319msbuild.exe f:snakeW9A30040.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 dire à MSBuild de compiler pour la série D'outils de la plate-forme v110?
6 réponses
j'ai rencontré le même problème avec la version de VS 2012. Vous pouvez également définir VisualStudioVersion comme une propriété avec MSBuild par opposition à traiter avec des variables d'environnement comme mentionné 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 je suis sûr que ça marche aussi bien, honnêtement je n'ai pas essayé ça car j'essayais de rester à l'écart d'avoir à modifier les variables d'environnement.
assurez-vous que le haut de votre .SLN
le fichier ressemble à ceci:
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2012
quand vous double-cliquez sur le fichier solution, c'est le # Visual Studio 2012
qui contrôle quelle version de Visual Studio est chargée (et contrôle l'icône affichée dans Windows Explorer).
Toutefois, lorsque vous exécutez MSBuild
, regarde Format Version 12.00
partie.
Confus?
c'est déroutant, car Visual Studio 2010 est la version 10.0 et Visual Studio 2012 est version 11.0 (pas 12.0), et à l'aide de la version 12.0 solution format de fichier causes MSBuild (implicitement) set VisualStudioVersion
pour 11.0.
j'ai trouvé une solution à ce problème; il pourrait s'agir d'un problème de version bêta de Visual Studio 11 qui sera résolu avant la publication officielle.
de toute façon, si vous êtes intéressé par MSBuild, il suffit de définir la variable D'environnement "VisualStudioVersion" égale à "11.0" avant D'appeler MSBuild.EXE.
dans les fichiers batch
set VisualStudioVersion=11.0
ou en VB.NET
Environment.SetEnvironmentVariable("VisualStudioVersion", "11.0")
à partir de Visual Studio 2013, MSBuild fait maintenant partie de Visual Studio, et le chemin correct devrait être $(MSBuild Toolspath) ("C:\Program Files (x86)\MSBuild\12.0\Bin"). Si vous utilisez msbuild.exe du dossier. NET framework ("C:\Windows\Microsoft.NET\Framework64\v4.0.30319") il ne pourra pas distinguer les versions vs2012 et vs2013.
utilisez les options basées sur le menu pour faire ceci. À partir de VC++2010 Express: - Clic droit sur le fichier principal du projet (et non la solution elle-même au sommet de l'arbre). - Cliquez Sur Général. - Trouvez les outils de la plate-forme sur le côté droit de la boîte de dialogue, la moitié supérieure. - Passage de v110 à v100. - Cliquez sur OK.
----- Fait ------
Microsoft fournit un fichier batch pour définir tous les EnvVars Vous le trouverez dans le Menu Démarrer sous "Microsoft Visual Studio 2012/Visual Studio Tools" ou dans le dossier Visual Studio ("C:\Program fichiers (x86)\Microsoft Visual Studio 11.0\Common7\Tools\VsDevCmd.chauve-souris")