Создание проекта C++ на ПК с Windows SDK 7.1, но без VS2010

у меня есть проект C++ (своего рода консольное 32-разрядное приложение), разработанный в VS2010, который отлично работает на моем ПК (Windows 7 32-разрядный). На моем ПК установлен Microsoft SDK 7.0 A, который, я думаю, поставляется в комплекте с VS2010.
Я пытаюсь построить проект на сервере сборки, на котором не установлена Visual Studio - там присутствует только Microsoft SDK 7.1.
Я пытаюсь построить проект с помощью msbuild (это в конечном итоге станет задачей для TeamCity runner), а на сервере сборки получаю следующие ошибки (предоставляется подробный журнал):

Project "E:wincore.sln" on node 1 (default targets).
ValidateSolutionConfiguration:
  Building solution configuration "Debug|Win32".
Project "E:wincore.sln" (1) is building "E:wincore_unittests.vcxproj" (2) on node 1 (default targets).
Project "E:wincore_unittests.vcxproj" (2) is building "E:cpptestwincpptest.vcxproj" (3) on node 1 (default targets).
C:WINDOWSMicrosoft.NETFrameworkv4.0.30319Microsoft.Common.Targets(847,9): warning MSB3644: The reference assemblies for framework ".NETFramework,Version=v4.0" were not found. To resolve this, install the SDK or Targeting Pack for this framework version or retarget your application to a version of the framework for which you have the SDK or Targeting Pack installed. Note that assemblies will be resolved from the Global Assembly Cache (GAC) and will be used in place of reference assemblies. Therefore your assembly may not be correctly targeted for the framework you intend. [E:cpptestwincpptest.vcxproj]
C:Program FilesMSBuildMicrosoft.Cppv4.0Microsoft.CppBuild.targets(297,5): warning MSB8003: Could not find WindowsSDKDir variable from the registry.  TargetFrameworkVersion or PlatformToolset may be set to an invalid version number. [E:wincpptest.vcxproj]
InitializeBuildStatus:
  Touching "E:cpptestwin......outDebugcpptestcpptest.unsuccessfulbuild".
ClCompile:
  C:Program FilesMicrosoft Visual Studio 10.0VCbinCL.exe /c /ZI /nologo /W3 /WX- /Od /Oy- /D WIN32 /D _DEBUG /D _LIB /D _UNICODE /D UNICODE /Gm /EHsc /RTC1 /MTd /GS /fp:precise /Zc:wchar_t /Zc:forScope /Fo"E:cpptestwin......outDebugcpptest" /Fd"E:cpptestwin......outDebugcpptestvc100.pdb" /Gd /TP /analyze- /errorReport:queue ../missing.cpp
  missing.cpp
e:cpptestmissing.cpp(36): fatal error C1083: Cannot open include file: 'windows.h': No such file or directory [E:cpptestwincpptest.vcxproj]

Я полагаю, что проблема связана с невозможностью msbuild найти Microsoft SDK, который установлен в "E:Program FilesMicrosoft SDKsWindowsv7.1".

есть несколько советов, как справиться с этой проблемой доступен на сайте:

  1. копировать часть реестра в разделе HKLMSOFTWAREMicrosoftMicrosoft SDKsWindowsv7.1 to HKCU (см. WindowsSdkDir установлен неправильно в Visual Studio 2008?). Я не пробовал. обходной путь, потому что он выглядит слишком уродливым, и процесс сборки будет работать с учетными данными системной учетной записи.
  2. передать WindowsSDKDir в качестве дополнительных параметров для MSBuild (как предложено в TeamCity и MSBuild причуды #1).
  3. настройки VCProjectEngine.dll.config.xml как предлагается в ответ до включить пути поиска в конфигурациях сборки TeamCity (я не нашел такой файл на ПК с Windows SDK).
  4. изменить набор инструментов в свойства проекта, предложенные в ответ до WindowsSdkDir установлен неправильно в Visual Studio 2010 (я сомневаюсь, что это поможет, потому что на моем ПК не установлен Windows SDK 7.1).

на самом деле при компиляции с CL.EXE все идет хорошо (потому что у меня есть INCLUDE и LIB переменные определены), поэтому было бы обходным путем заставить msbuild использовать / передавать переменные среды...

есть похожие вопросы:

в любом случае кто-нибудь преуспел в создании проектов Visual C++ 2010 на ПК с установленным Windows SDK?

2 ответов


я, наконец, нашел какой - то работоспособный и значимый обходной путь для проблемы-внутри " можем ли мы построить *.vcxproj (проект C++) с использованием MSBuild 4.0 без установки Visual Studio 2010?".
Короче говоря: я должен явно указать набор инструментов платформы при создании решения на ПК без VS2010. Команда будет выглядеть так:

msbuild /p:PlatformToolset=Windows7.1SDK core.sln

вам, вероятно, нужно будет пойти тем же путем, если ваш проект имеет v100 или v90 указан в качестве платформы Набор инструментов.

и дополнительная подсказка для энтузиастов TeamCity, запуск сервера на ПК с установленным одиноким Windows SDK.
Вместо изменения всех шагов сборки достаточно указать набор инструментов платформы в свойствах агента. Для этого добавьте следующую строку ?:\TeamCity\buildAgent\conf\buildAgent.properties:

system.PlatformToolset=Windows7.1SDK

Счастливый дом! :)


также вы можете добавить этот узел и значение в реестр (исправить с помощью версии install dirs & win 32/64).

---начать .файл---

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio.0\Setup\VS]
"ProductDir"="C:\Program Files (x86)\Microsoft Visual Studio 10.0\"

---конец .файл---

из-за сценария MSBuild %ProgramFiles (x86)%\MSBuild\Microsoft.СРР\В4.0\Платформ\\Win32 С PlatformToolsets\Windows7 На.1SDK\Майкрософт.СРР.С Win32.Windows7 на.1SDK.реквизит" поиск VSInstallDir.