Ho un progetto C++ (una sorta di appplicazione a 32 bit della console) sviluppato in VS2010, che si adatta perfettamente al mio PC (Windows 7 a 32 bit) . Il mio PC ha installato Microsoft SDK 7.0A, che a mio avviso viene fornito in bundle con VS2010.
Provo a creare il progetto su un server di generazione, che non ha installato Visual Studio, solo Microsoft SDK 7.1 è presente.
cerco di costruire il progetto con l'aiuto di msbuild (questo finirà per diventare il compito per corridore di TeamCity), e sul server di build ottengo dopo gli errori (il registro dettagliato è fornito):Creazione di progetto C++ su un PC con Windows SDK 7.1 ma senza VS2010
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]
I supponiamo che il problema sia legato all'incapacità di msbuild di trovare Microsoft SDK, che viene installato in "E:\Program Files\Microsoft SDKs\Windows\v7.1"
.
ci sono alcuni consigli su come gestire questo problema disponibile sul Web:
- Copia parte del Registro di sistema sotto
HKLM\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.1
perHKCU
(vedi WindowsSdkDir is not set correctly in Visual Studio 2008?). Non ho provato questa soluzione perché, poiché sembra troppo brutta, e il processo di compilazione verrà eseguito con credenziali dell'account SYSTEM. - Passaggio
WindowsSDKDir
come parametri aggiuntivi a MSBuild (come proposto in TeamCity and MSBuild Quirks #1). - Tweaking
VCProjectEngine.dll.config.xml
come proposto nello answer a Include Search Paths in TeamCity build Configurations (Non ho trovato tale file sul PC con Windows SDK). - Modificare il set di strumenti della piattaforma nelle proprietà del progetto come proposto in the answer in WindowsSdkDir is not set correctly in Visual Studio 2010 (dubito che ciò possa essere d'aiuto, poiché sul mio PC non è installato Windows SDK 7.1).
In realtà quando si compila con CL.EXE
tutto va bene (perché ho INCLUDE
e LIB
variabili definite), quindi sarebbe una soluzione per costringere msbuild usare/passare le variabili di ambiente ...
ci sono problemi simili:
- "Differences between building on a machine with VS2010 installed and on a machine with the 7.1 SDK installed" ma per i progetti .NET.
- Erroneous Windows SDK x64 Compilation Warning (creazione di un progetto a 32 bit per la piattaforma 64 bit).
Comunque qualcuno ha saputo con la costruzione di Visual C++ 2010 progetti su un PC con Windows SDK installato?
Ciao, puoi specificare meglio come si esegue Visual Studio 2010 C++ progetto su un server di build con team city agent? L'utilizzo della soluzione di sviluppo di Visual Studio 2010 non funziona perché sembra s il MSBuild dipende da una DLL mspdb100.dll mancante – Stefano
@Stefano, normalmente la soluzione giusta nel tuo caso è quella di aggiungere la directory 'mspdb100.dll' a'% PATH% '. – AntonK