Как использовать MSBuild для целевого набора инструментов платформы v110?
Я разрабатываю приложение командной строки, которое создает полное решение Visual Studio 11, выполненное из одного проекта VС++, и которое пытается скомпилировать его в конце с помощью MSBuild.
Проблема, с которой я столкнулась, странная.
Если я запускаю свою программу командной строки внутри Visual Studio 11, она работает; если я вместо этого запускаю его за пределами среды разработки, он вызывает ошибку:
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]
Команда, которую я использую, следующая:
C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe f:\snake\W9A30040.vcxproj /property:PlatformToolset=v110;Configuration=Debug /v:quiet
Но у меня такое ощущение, что PlatformToolset = v110 игнорируется, а MSBuild использует v100 (Visual Studio 2010).
Есть ли у вас какие-либо предложения о том, как сообщить MSBuild о компиляции для v110 Platform Toolset?
Ответы
Ответ 1
Я нашел обходной путь для этой проблемы; может быть проблемой Visual Studio 11 Beta, которая будет решена до официального выпуска.
В любом случае, если вам интересно, просто установите для переменной среды "VisualStudioVersion" значение "11.0" перед вызовом MSBuild.exe.
В пакетных файлах
set VisualStudioVersion=11.0
или в VB.NET
Environment.SetEnvironmentVariable("VisualStudioVersion", "11.0")
Ответ 2
Я столкнулся с той же проблемой, что и с полной версией VS 2012. Вы также можете установить VisualStudioVersion как свойство с MSBuild, а не с переменными окружения, как указано в принятом ответе. Например:
C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe .\myproject.vcxproj /p:VisualStudioVersion=11.0
Подход переменных окружения, я уверен, работает так же хорошо, я честно не пробовал это, потому что я старался держаться подальше от необходимости изменять переменные среды.
Ответ 3
Убедитесь, что верхняя часть вашего файла .SLN
выглядит так:
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2012
Когда вы дважды щелкаете по файлу решения, он # Visual Studio 2012
, который контролирует, какая версия Visual Studio загружается (и управляет значком, отображаемым в проводнике Windows).
Однако, когда вы запускаете MSBuild
, он смотрит на часть Format Version 12.00
.
Confused?
Это запутанно, так как Visual Studio 2010 - это версия 10.0, а Visual Studio 2012 - версия 11.0 (не 12.0), а использование формата файла версии 12.0 заставляет MSBuild (неявно) устанавливать VisualStudioVersion
в 11.0.
Ответ 4
Начиная с Visual Studio 2013, MSBuild теперь является частью Visual Studio, а правильный путь должен быть $(MSBuildToolsPath) ( "C:\Program Files (x86)\MSBuild\12.0\Bin" ). Если вы используете msbuild.exe из папки .Net framework ( "C:\Windows\Microsoft.NET\Framework64\v4.0.30319" ), он не сможет отличить версии vs2012 и vs2013.
Ответ 5
Для этого используйте параметры на основе меню. Из VС++ 2010 Express:
- Щелкните правой кнопкой мыши по основному файлу проекта (а не самому решению на самой вершине дерева).
- Нажмите "Общие".
- Найдите набор инструментов для платформы в правой части диалогового окна, в верхней половине.
- Перейдите с v110 на v100.
- Нажмите "ОК".
----- Готово ------
Ответ 6
Microsoft предоставляет пакетный файл для установки всех EnvVars
Вы найдете его в меню "Пуск" в разделе "Microsoft Visual Studio 2012/Инструменты Visual Studio" или в папке Visual Studio ( "C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\Tools\VsDevCmd.bat" )