2011-12-26 9 views
10

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:

  1. Copia parte del Registro di sistema sotto HKLM\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.1 per HKCU (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.
  2. Passaggio WindowsSDKDir come parametri aggiuntivi a MSBuild (come proposto in TeamCity and MSBuild Quirks #1).
  3. 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).
  4. 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:

Comunque qualcuno ha saputo con la costruzione di Visual C++ 2010 progetti su un PC con Windows SDK installato?

risposta

11

Ho finalmente trovato una soluzione pratica e significativa per il problema, all'interno di "Can we build *.vcxproj(c++ project) using MSBuild 4.0 without installing the Visual Studio 2010?".
In breve: devo specificare esplicitamente il set di strumenti della piattaforma quando si crea la soluzione su un PC senza VS2010. Il comando sarà simile:

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

Si avrà probabilmente bisogno di andare allo stesso modo se il progetto ha v100 o v90 specificata come Toolset piattaforma.

E un ulteriore suggerimento per gli entusiasti di TeamCity, l'esecuzione del server su un PC con un solo Windows SDK installato.
Invece di modificare tutti i passaggi di generazione, è sufficiente specificare il set di strumenti della piattaforma nelle proprietà dell'agente. Per fare che Aggiungete la seguente riga al ?:\TeamCity\buildAgent\conf\buildAgent.properties:

system.PlatformToolset=Windows7.1SDK 

edificio Felice! :)

+0

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

+0

@Stefano, normalmente la soluzione giusta nel tuo caso è quella di aggiungere la directory 'mspdb100.dll' a'% PATH% '. – AntonK

1

Inoltre, è possibile aggiungere questo valore al registro & (corretto con le directory di installazione & versione 32/64).

--- cominciare file 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\\" 

--- fine file .reg ---

a causa di MSBuild sceneggiatura % ProgramFiles (x86)% \ MSBuild \ Microsoft .Cpp \ v4.0 \ Platforms \ Win32 \ PlatformToolsets \ Windows7.1SDK \ Microsoft.Cpp.Win32.Windows7.1SDK.props "cerca VSInstallDir.

Problemi correlati