2011-12-26 6 views
10

के बिना मेरे पास वीएस -2010 में विकसित एक सी ++ प्रोजेक्ट (कंसोल 32-बिट एपप्लिकेशन का कुछ प्रकार) है, जो मेरे पीसी पर ठीक है (विंडोज 7 32-बिट) । मेरे पीसी में माइक्रोसॉफ्ट एसडीके 7.0 ए स्थापित है, जो मुझे लगता है कि वीएस -2010 के साथ आता है।
मैं एक बिल्ड सर्वर पर प्रोजेक्ट बनाने का प्रयास करता हूं, जिसमें कोई विजुअल स्टूडियो स्थापित नहीं है - केवल माइक्रोसॉफ्ट एसडीके 7.1 मौजूद है।
मैं MSBuild की मदद से परियोजना (यह अंततः TeamCity के धावक के लिए काम हो जाएगा) के निर्माण के लिए प्रयास करें, और निर्माण सर्वर पर मैं त्रुटियों निम्नलिखित मिल (विस्तृत लॉग प्रदान की जाती है):विंडोज एसडीके 7.1 के साथ पीसी पर बिल्डिंग सी ++ प्रोजेक्ट, लेकिन वीएस -2010

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] 

मैं मान लीजिए कि यह समस्या माइक्रोसॉफ्ट एसडीके खोजने के लिए एमएसबिल्ड की अक्षमता से संबंधित है, जो "E:\Program Files\Microsoft SDKs\Windows\v7.1" में स्थापित है।

  1. कॉपी HKCU को HKLM\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.1 के तहत रजिस्ट्री का हिस्सा (WindowsSdkDir is not set correctly in Visual Studio 2008? देखें):

    कैसे वेब पर इस मुद्दे को संभालने के लिए उपलब्ध कुछ सलाह कर रहे हैं। मैंने इस कामकाज की कोशिश नहीं की क्योंकि यह बहुत बदसूरत दिखता है, और निर्माण प्रक्रिया सिस्टम-खाता प्रमाण-पत्रों के साथ चलती है।

  2. एमएसबिल्ड के लिए अतिरिक्त पैरामीटर के रूप में WindowsSDKDir पास करें (जैसा कि TeamCity and MSBuild Quirks #1 में प्रस्तावित है)।
  3. VCProjectEngine.dll.config.xmlanswer से Include Search Paths in TeamCity build Configurations में प्रस्तावित अनुसार (मुझे विंडोज़ एसडीके के साथ पीसी पर ऐसी फाइल नहीं मिली है)।
  4. the answer से WindowsSdkDir is not set correctly in Visual Studio 2010 में प्रस्तावित प्रोजेक्ट गुणों में प्लेटफ़ॉर्म टूलसेट बदलें (मुझे संदेह है कि इससे मदद मिलेगी, क्योंकि मेरे पीसी में विंडोज एसडीके 7.1 स्थापित नहीं है)।

असल में जब CL.EXE सब कुछ के साथ संकलन ठीक हो जाता है (क्योंकि मैं INCLUDE और LIB चर परिभाषित किया गया है), तो यह उपयोग करने के लिए मजबूर करने के लिए MSBuild एक समाधान हो सकता है/पारित वातावरण चर ...

रहे हैं इसी तरह के मुद्दे:

वैसे भी किसी पर Windows SDK के साथ एक पीसी स्थापित Visual C++ 2010 परियोजनाओं के निर्माण के साथ सफल रहा है?

उत्तर

11

मुझे अंततः "Can we build *.vcxproj(c++ project) using MSBuild 4.0 without installing the Visual Studio 2010?" के अंदर इस मुद्दे के लिए एक व्यावहारिक और सार्थक कामकाज मिला है।
संक्षेप में: मुझे VS2010 के बिना किसी पीसी पर समाधान बनाने के दौरान प्लेटफ़ॉर्म टूलसेट को स्पष्ट रूप से निर्दिष्ट करना होगा।

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

आप शायद अगर अपनी परियोजना v100 या v90 मंच टूलसेट के रूप में निर्दिष्ट है उसी तरह से जाने के लिए की आवश्यकता होगी: आदेश की तरह दिखाई देगा।

और टीमसिटी के उत्साही लोगों के लिए एक अतिरिक्त संकेत, एक पीसी पर एकमात्र विंडोज एसडीके स्थापित सर्वर पर चल रहा है।
सभी बिल्ड चरणों को संशोधित करने के बजाय, एजेंट के गुणों में प्लेटफ़ॉर्म टूलसेट निर्दिष्ट करने के लिए पर्याप्त है। ?:\TeamCity\buildAgent\conf\buildAgent.properties है कि ऐड निम्नलिखित लाइन करने के लिए:

system.PlatformToolset=Windows7.1SDK 

मुबारक इमारत! :)

+0

हाय, क्या आप बेहतर तरीके से निर्दिष्ट कर सकते हैं कि आप विजुअल स्टूडियो 2010 सी ++ कैसे चलाते हैं टीम सिटी एजेंट के साथ एक बिल्ड सर्वर पर प्रोजेक्ट? विजुअल स्टूडियो 2010 सॉल्यूशन बिल्ड का उपयोग करना काम नहीं करता है क्योंकि ऐसा लगता है एमएसबिल्ड एक लापता mspdb100.dll DLL – Stefano

+0

@Stefano पर निर्भर करता है, आमतौर पर आपके मामले में सही समाधान 'mspdb100.dll' की निर्देशिका को'% PATH% 'में जोड़ना है। – AntonK

1

इसके अलावा आप रजिस्ट्री के लिए यह नोड & मान जोड़ सकते हैं (आपके इंस्टॉल डीआईआर & 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 सीपीपी \ v4.0 \ प्लेटफार्म \ Win32 \ PlatformToolsets \ Windows7.1SDK \ Microsoft.Cpp.Win32.Windows7.1SDK.props "VSInstallDir के लिए खोजें।

संबंधित मुद्दे