Подтвердить что ты не робот

Как использовать 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?

4b9b3361

Ответ 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" )