2009-04-20 29 views
5

Sử dụng Visual Studio 2008, tôi đã tạo dự án C++ Win32. Để phát hành chương trình, tôi đã tạo một dự án thiết lập Visual Studio trong cùng một giải pháp.Tại sao dự án Visual Studio Win32 của tôi yêu cầu .NET 3.5 SP1 để cài đặt?

Setup.exe sẽ nhắc người dùng của tôi cài đặt .NET 3.5 SP1, thường cài đặt 15 phút và chỉ được phép cho tài khoản cấp quản trị viên. Nếu họ không có lỗi dọc theo dòng "khung sai". Tôi đang bối rối về những gì trong dự án của tôi yêu cầu. NET 3.5 SP1. Tôi nghi ngờ chỉ vì đó là khuôn khổ máy tính của tôi là trên ... Có cách nào để mở rộng mà khuôn khổ nó sẽ chạy trên?

Mã chủ yếu là các cuộc gọi API Win32. Chỉ trong trường hợp, đây là phụ thuộc và # bao gồm của tôi:

gdiplus.lib 
comctl32.lib 
Winmm.lib 
d3d9.lib 

(. Dự án thiết lập tự động thêm vào comdlg32.dll, sau đó nói với tôi để loại trừ nó)

#include <windows.h> 
#include <tchar.h> 
#include <stdio.h> 
#include <stdlib.h> 
#include <iostream> 
#include <fstream> 
#include <string.h> 

#include <commctrl.h> 
#include <process.h> 
#include <sstream> 
#include <math.h> 
#include <d3d9.h> 
#include <time.h> 
#include <gdiplus.h> 

tôi đoán là ở đâu đó thông qua windows.h có một cài đặt WIN_VER hoặc phiên bản tương tự được đặt thành .NET 3.5 SP1 và đây là nơi phụ thuộc đến. Nếu đúng như vậy, và tôi cần xác định một phiên bản khác, tôi rất muốn nghe lời khuyên của mọi người về những điều không nên làm/và cách thức và tôi có thể đi bao xa để có mức độ bao gồm tối đa.

+0

liên quan: [? Tại sao các dự án có nguồn gốc C++ có một TargetFrameworkVersion] * (http://stackoverflow.com/ question/21845605) * –

Trả lời

3

Trong VS 2008, khung mục tiêu mặc định là .NET 3.5.

Đối với C++ trên trang Thuộc tính chung, có một trình đơn thả xuống "Khung được nhắm mục tiêu", nhưng trên dự án thử nghiệm tôi đã tạo màu xám, vì vậy có vẻ như không thể thay đổi sau khi dự án được tạo.

Tôi đã tạo dự án C++ thứ hai và chọn Mẫu 2.0 từ hộp thoại Dự án mới và có 2.0 trong "Khung được nhắm mục tiêu".

Vì vậy, nếu bạn muốn nhắm mục tiêu phiên bản thấp hơn của khung, có vẻ như bạn phải tạo dự án của mình một cách chính xác ngay từ đầu.

EDIT: Khi mà phiên bản của khuôn khổ này bạn nên nhắm mục tiêu - tất cả phụ thuộc

Bạn cần phải sử dụng bất kỳ 3.0 hoặc 3.5 tính năng (!)? Nếu không thì hãy đi 2.0. Nếu bạn làm sau đó chọn một và lấy hit của tải về. Tôi không thể nói khả năng là bất kỳ lớp người dùng nào sẽ cài đặt một phiên bản cụ thể. Khi thời gian trôi qua nó sẽ ngày càng có khả năng rằng họ sẽ có 3,5 cài đặt như các ứng dụng khác sẽ yêu cầu nó.

+0

Ok, tôi thấy điều này ngay bây giờ. Cảm ơn. Thật không may là màu xám, vì vậy tôi đoán tôi sẽ bắt đầu một dự án mới và sao chép tất cả mọi thứ. Tất cả người dùng của tôi sẽ có cửa sổ XP chuyên nghiệp, có ai trực tiếp biết khung mục tiêu tôi nên đi không? –

+0

Re phiên bản nào: Tôi thực sự không cần các tính năng .NET (mà tôi biết - đó là mã win32 api), nhưng studio trực quan 2008 giới hạn tôi chọn .NET 2.0, 3.0 hoặc 3.5. Vì vậy, tôi sẽ đi cho lâu đời nhất, 2.0, hy vọng rằng một trong hai cửa sổ XP chuyên nghiệp, Microsoft văn phòng năm 2003, hoặc internet explorer 6 (trên tất cả các chiếc của người dùng mục tiêu) mang ít nhất 2.0. Nếu không, những người dùng đó có thể tải xuống bản cập nhật. Cảm ơn một lần nữa! –

+0

Bạn có thể chấp nhận điều này không;) – ChrisF

3

Bạn đã kiểm tra các điều kiện tiên quyết trên dự án trình cài đặt chưa? (Nhấp chuột phải ->Thuộc tính; Nút đặt trước). Trong dự án thử nghiệm tôi đã tạo, khung .NET được chọn theo mặc định (tôi cho rằng nó không thực sự phân tích các dự án đang được cài đặt, vì nó không bao gồm thư viện thời gian chạy C++ theo mặc định, hoặc.)

+1

Cảm ơn bạn đã trả lời. Các điều kiện tiên quyết trong dự án trình cài đặt thực sự bao gồm .Net Framework 3.5 SP1. Tuy nhiên, nếu tôi loại bỏ điều này sau đó tôi sẽ nhận được lỗi "sai khuôn khổ" khi họ chạy chương trình. Câu trả lời của ChrisF tôi nghĩ là vấn đề của tôi, khi tôi tạo dự án tôi đã mặc định thành .Net 3.5 làm khung mục tiêu .. và vì lý do nào đó, điều này không thể thay đổi trong C++ sau khi tạo. –

+0

Bạn đã tạo ứng dụng mẫu nào? Có sử dụng bất kỳ thiết bị chuyển mạch/clr (hoặc tương tự) nào không? Bạn đã thử sử dụng depnds.exe để xác định phụ thuộc thực tế chưa? –

+0

Tôi đã sử dụng mẫu "dự án Win32" và sau đó trong trình hướng dẫn thiết lập dự án được chọn "dự án trống". Trình chuyển đổi trình biên dịch là "/ O2/Oi/GL/D" _MBCS "/ FD/EHSC/MD/Gy/Fo" Bản phát hành \\ "/Fd"Release\vc90.pdb"/W3/nologo/c/Zi/TP/errorReport: nhắc " mà tôi không tin là có liên quan đến thời gian chạy ngôn ngữ chung. Tôi đang thiết lập depend.exe ngay bây giờ (đoán nó không phải là một cài đặt mặc định, phải xác định nó trong cài đặt tùy chỉnh của visual studio) và sẽ xem xét điều đó. Cảm ơn - Jeff –

0

Vâng, đối với các dự án C#, nếu bạn bấm chuột phải vào tệp Dự án trong Solution Explorer và đi đến Thuộc tính, bạn có thể thay đổi Khung mục tiêu trên tab "Ứng dụng". Có thể có một cái gì đó tương tự trong thuộc tính dự án C++.

3

Trong trường hợp của mình, tôi đã khắc phục tất cả các sự cố mà giao diện người dùng sẽ cho phép tôi, Các truy vấn trước, các thuộc tính chung ... Không quan trọng, vẫn muốn .NET 3.5.

Vì vậy, tôi đã mở tệp vdproj trong slickedit và sửa đổi nó trực tiếp. Thay đổi

"ExternalPersistence" 
    { 
     "LaunchCondition" 
     { 
      "{A06ECF26-33A3-4562-8140-9B0E340D4F24}:_38ABBBBC51344AFFA38F2922DFFFE5B5" 
      { 
      "Name" = "8:.NET Framework" 
      "Message" = "8:[VSDNETMSG]" 
      "Version" = "8:3.5.30729" 
      "AllowLaterVersions" = "11:FALSE" 
      "InstallUrl" = "8:http://go.microsoft.com/fwlink/?LinkId=76617" 
      } 
     } 
    } 

để

"ExternalPersistence" 
    { 
    } 

Và nó quit yêu cầu .NET 3.5

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