Gebäude C++ - Projekt auf einem PC mit Windows SDK 7.1 aber ohne VS2010
Ich habe ein C++ - Projekt (eine Art Konsole 32-bit-appplication) entwickelt, in VS2010, die baut gerade gut auf meinem PC (Windows 7 32-bit). Mein PC hat Microsoft SDK 7.0 A installiert, ich denke, das kommt gebündelt mit VS2010.
Ich versuche, das Projekt auf einem build-server, die nicht über Visual Studio installiert - nur Microsoft SDK 7.1 ist vorhanden.
Ich versuche, das Projekt mit Hilfe von msbuild (dieses wird schließlich die Aufgabe, für TeamCity - runner), und auf dem build-server bekomme ich folgenden Fehler (das ausführliche Protokoll wird zur Verfügung gestellt):
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]
Ich nehme an, das Problem bezieht sich auf die Unfähigkeit von msbuild finden Sie Microsoft SDK installiert ist in "E:\Program Files\Microsoft SDKs\Windows\v7.1"
.
Gibt es einige Ratschläge, wie man diesem Problem finden Sie auf der Web:
- Kopieren Sie einen Teil registry unter
HKLM\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.1
zuHKCU
(siehe WindowsSdkDir nicht richtig eingestellt ist, in Visual Studio 2008?). Ich habe nicht versucht, diese Umgehungsmöglichkeit, da wie es aussieht zu hässlich, und der build-Prozess läuft mit SYSTEM-Konto-Anmeldeinformationen. - Pass
WindowsSDKDir
als extra Parameter an MSBuild (wie vorgeschlagen in TeamCity und MSBuild Macken #1). - Tweaking
VCProjectEngine.dll.config.xml
wie vorgeschlagen, in der Antwort zu Einbeziehen von Suchpfaden in TeamCity build-Konfigurationen (ich habe nicht gefunden, eine solche Datei auf dem PC mit dem Windows SDK). - Ändern Sie die Plattform-Tools in das Projekt Eigenschaften wie vorgeschlagen, die Antwort zu WindowsSdkDir nicht richtig eingestellt ist, in Visual Studio 2010 (ich bezweifle, dass dies helfen wird, weil mein PC nicht über Windows SDK 7.1 installiert).
Eigentlich beim kompilieren mit CL.EXE
geht alles in Ordnung (da habe ich INCLUDE
und LIB
definierten Variablen), so wäre es eine Abhilfe, um die Kraft msbuild verwenden/übergabe der Umgebungsvariablen...
Gibt es ähnliche Probleme:
- "Unterschiede zwischen dem Aufbau auf einer Maschine mit VS2010 installiert und auf einem Rechner mit dem SDK 7.1 installiert" aber für .NET-Projekten.
- Fehlerhafte Windows SDK x64 Compilerwarnung (Gebäude 32-bit-Projekt für 64-bit-Plattform).
Sowieso hat jemand gelungen, mit dem Aufbau Visual C++ - 2010-Projekte, die auf einem PC mit Windows SDK installiert?
InformationsquelleAutor AntonK | 2011-12-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich endlich gefunden, eine Art, eine praktikable und sinnvolle workaround für das Problem - im inneren "Können wir bauen *.vcxproj(c++ Projekt), der Verwendung von MSBuild 4.0 ohne Installation von Visual Studio 2010?".
Kurzum: ich habe explizit den Plattform-Toolset beim Bau der Lösung auf einem PC ohne VS2010. Der Befehl wird so Aussehen:
Werden Sie wahrscheinlich benötigen, um zu gehen, denselben Weg, wenn Ihr Projekt
v100
oderv90
angegeben, wie die Plattform-Toolset.Haben und ein extra-Tipp für TeamCity Enthusiasten, auf dem der server läuft auf einem PC mit einem lone Windows SDK installiert ist.
Statt einer änderung alle build-Schritten, es ist genug zu geben die Plattform-Toolset in der agent-Eigenschaften.
Das zu tun, fügen Sie die folgende Zeile zu
?:\TeamCity\buildAgent\conf\buildAgent.properties
:Viel Spaß beim bauen! 🙂
normalerweise wird die richtige Lösung in deinem Fall ist das Verzeichnis einfügen, in der
mspdb100.dll
zu%PATH%
.InformationsquelleAutor AntonK
Auch Sie können diese Knoten & Wert für Registrierung (richtig mit Ihrer Installation dirs & win 32/64 version).
---beginnen .reg Datei---
---Ende .reg Datei---
weil der MSBuild-Skript
%ProgramFiles(x86)%\MSBuild\Microsoft.Cpp\v4.0\Platforms\Win32\PlatformToolsets\Windows7.1SDK\Microsoft.Cpp.Win32.Windows7.1SDK.props" auf der Suche nach VSInstallDir.
InformationsquelleAutor djdron