2011-12-26 40 views
10

Tôi có một dự án C++ (một số ứng dụng giao diện điều khiển 32 bit) được phát triển trong VS2010, xây dựng tốt trên PC của tôi (Windows 7 32-bit) . Máy tính của tôi có cài đặt Microsoft SDK 7.0A, mà tôi nghĩ là đi kèm với VS2010.
Tôi cố gắng xây dựng dự án trên máy chủ xây dựng, không có bất kỳ Visual Studio nào được cài đặt - chỉ có Microsoft SDK 7.1 có mặt ở đó.
tôi cố gắng xây dựng các dự án với sự giúp đỡ của msbuild (điều này cuối cùng sẽ trở thành nhiệm vụ cho Á hậu TeamCity), và trên server build tôi nhận được lỗi sau (các bản ghi chi tiết được cung cấp):Xây dựng dự án C++ trên PC với Windows SDK 7.1 nhưng không có 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] 

tôi giả sử vấn đề liên quan đến tính không có khả năng của msbuild để tìm Microsoft SDK, được cài đặt vào "E:\Program Files\Microsoft SDKs\Windows\v7.1".

Có vài lời khuyên làm thế nào để xử lý vấn đề này có sẵn trên web:

  1. Sao chép một phần của registry dưới HKLM\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.1 để HKCU (xem WindowsSdkDir is not set correctly in Visual Studio 2008?). Tôi đã không cố gắng giải pháp này vì nó trông quá xấu xí, và quá trình xây dựng sẽ chạy với chứng chỉ tài khoản SYSTEM.
  2. Vượt qua WindowsSDKDir làm thông số bổ sung cho MSBuild (như được đề xuất trong TeamCity and MSBuild Quirks #1).
  3. Tinh chỉnh VCProjectEngine.dll.config.xml như được đề xuất trong answer đến Include Search Paths in TeamCity build Configurations (Tôi chưa tìm thấy tệp đó trên PC bằng Windows SDK).
  4. Thay đổi bộ công cụ nền tảng trong thuộc tính dự án như được đề xuất trong the answer đến WindowsSdkDir is not set correctly in Visual Studio 2010 (Tôi nghi ngờ điều này sẽ hữu ích, vì PC của tôi chưa cài đặt Windows SDK 7.1).

Trên thực tế khi biên dịch với CL.EXE mọi thứ diễn ra tốt đẹp (vì tôi có INCLUDELIB biến được định nghĩa), do đó nó sẽ là một cách giải quyết để buộc msbuild sử dụng/vượt qua các biến môi trường ...

Có các vấn đề tương tự:

Dù sao có ai thành công với việc tạo dự án Visual C++ 2010 trên PC có cài đặt Windows SDK không?

Trả lời

11

Cuối cùng tôi đã tìm thấy một số cách giải quyết khả thi và có ý nghĩa cho vấn đề - bên trong "Can we build *.vcxproj(c++ project) using MSBuild 4.0 without installing the Visual Studio 2010?".
Tóm lại: Tôi phải chỉ định rõ ràng Platform Toolset khi xây dựng giải pháp trên PC mà không cần VS2010. Lệnh sẽ trông giống như:

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

Bạn có thể sẽ cần phải đi cùng một con đường nếu dự án của bạn có v100 hoặc v90 quy định như Cương lĩnh Toolset.

Và một gợi ý bổ sung cho những người đam mê TeamCity, chạy máy chủ trên PC với cài đặt Windows SDK đơn độc.
Thay vì sửa đổi tất cả các bước xây dựng, nó là đủ để chỉ định Platform Toolset trong thuộc tính của tác nhân. Để làm điều đó add dòng sau vào ?:\TeamCity\buildAgent\conf\buildAgent.properties:

system.PlatformToolset=Windows7.1SDK 

Xây vui vẻ! :)

+0

Xin chào, bạn có thể chỉ định rõ hơn cách bạn chạy Visual Studio 2010 C++ dự án trên một máy chủ xây dựng với đại lý thành phố nhóm? Sử dụng bước xây dựng giải pháp Visual Studio 2010 không hoạt động vì nó có vẻ s tht các MSBuild phụ thuộc vào một thiếu mspdb100.dll DLL – Stefano

+0

@Stefano, thường là giải pháp đúng trong trường hợp của bạn là thêm thư mục 'mspdb100.dll' vào'% PATH% '. – AntonK

1

Ngoài ra, bạn có thể thêm nút này & giá trị để đăng ký (đúng với cài đặt dirs & giành phiên bản 32/64).

--- bắt đầu tập tin .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\\" 

--- file kết thúc .reg ---

vì MSBuild kịch bản % ProgramFiles (x86)% \ MSBuild \ Microsoft .Cpp \ v4.0 \ Platforms \ Win32 \ PlatformToolsets \ Windows7.1SDK \ Microsoft.Cpp.Win32.Windows7.1SDK.props "tìm kiếm VSInstallDir.

Các vấn đề liên quan