Сборка проекта C ++ на ПК с Windows SDK 7.1, но без VS2010 - PullRequest
10 голосов
/ 26 декабря 2011

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

Project "E:\win\core.sln" on node 1 (default targets).
ValidateSolutionConfiguration:
  Building solution configuration "Debug|Win32".
Project "E:\win\core.sln" (1) is building "E:\win\core_unittests.vcxproj" (2) on node 1 (default targets).
Project "E:\win\core_unittests.vcxproj" (2) is building "E:\cpptest\win\cpptest.vcxproj" (3) on node 1 (default targets).
C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Microsoft.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:\cpptest\win\cpptest.vcxproj]
C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\Microsoft.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:\win\cpptest.vcxproj]
InitializeBuildStatus:
  Touching "E:\cpptest\win\..\..\..\out\Debug\cpptest\cpptest.unsuccessfulbuild".
ClCompile:
  C:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.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:\cpptest\win\..\..\..\out\Debug\cpptest\\" /Fd"E:\cpptest\win\..\..\..\out\Debug\cpptest\vc100.pdb" /Gd /TP /analyze- /errorReport:queue ../missing.cpp
  missing.cpp
e:\cpptest\missing.cpp(36): fatal error C1083: Cannot open include file: 'windows.h': No such file or directory [E:\cpptest\win\cpptest.vcxproj]

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

В Интернете есть несколько советов по решению этой проблемы:

  1. Скопировать часть реестра из HKLM\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.1 в HKCU (см. WindowsSdkDir неправильно установлен в Visual Studio 2008? ). Я не пробовал этот обходной путь, потому что он выглядит слишком уродливо, и процесс сборки будет выполняться с учетными данными SYSTEM-учетной записи.
  2. Передайте WindowsSDKDir в качестве дополнительных параметров для MSBuild (как предложено в TeamCity и MSBuild Quirks # 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 ]

11 голосов
/ 27 декабря 2011

Наконец-то я нашел какой-то приемлемый и значимый обходной путь для этой проблемы - внутри «Можем ли мы построить * .vcxproj (проект c ++) с использованием MSBuild 4.0 без установки Visual Studio 2010?» .
Вкратце: я должен явно указать Platform Toolset при сборке решения на ПК без VS2010.Команда будет выглядеть следующим образом:

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

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

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

system.PlatformToolset=Windows7.1SDK

Счастливое здание!:)

1 голос
/ 05 января 2013

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

--- начало .reg файла ---

Windows Registry Editor Version 5.00

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

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

из-за скрипта MSBuild % ProgramFiles (x86)% \ MSBuild \ Microsoft.Cpp \ v4.0 \ Platforms \ Win32 \ PlatformToolsets \ Windows7.1SDK \ Microsoft.Cpp.Win32.Windows7.1SDK.props "поиск VSInstallDir.

...