У меня есть проект 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"
.
В Интернете есть несколько советов по решению этой проблемы:
- Скопировать часть реестра из
HKLM\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.1
в HKCU
(см. WindowsSdkDir неправильно установлен в Visual Studio 2008? ). Я не пробовал этот обходной путь, потому что он выглядит слишком уродливо, и процесс сборки будет выполняться с учетными данными SYSTEM-учетной записи.
- Передайте
WindowsSDKDir
в качестве дополнительных параметров для MSBuild (как предложено в TeamCity и MSBuild Quirks # 1 ).
- Тонкая настройка
VCProjectEngine.dll.config.xml
, как предлагается в ответе на Включение путей поиска в конфигурации сборки TeamCity (я не нашел такой файл на ПК с Windows SDK).
- Измените набор инструментов платформы в свойствах проекта, как предложено в , ответ на WindowsSdkDir не установлен правильно в Visual Studio 2010 (сомневаюсь, что это поможет, потому что мой компьютер не ' Windows SDK 7.1 не установлен).
На самом деле при компиляции с CL.EXE
все идет хорошо (потому что у меня определены переменные INCLUDE
и LIB
), поэтому было бы обходным путем заставить msbuild использовать / передавать переменные окружения ...
Есть похожие проблемы:
В любом случае кому-нибудь удалось построить проекты Visual C ++ 2010 на ПК с установленным Windows SDK ?