Thay đổi dự án C ++ / CLI sang khung khác 4.0 so với vs2010


153

Vì tôi đã nâng cấp dự án của mình lên định dạng dự án visual studio 2010, dự án C ++ / CLI của tôi được nhắm mục tiêu đến .net framework 4.0.

Thật dễ dàng để chuyển phiên bản khung sang phiên bản khác từ dự án C #, nhưng tôi không biết làm thế nào để làm điều này trong dự án C ++ / CLI, tôi không thấy cài đặt nào cho điều này trong các trang thuộc tính dự án.

Câu trả lời:


190

Điều này hiển thị khi bạn nhấn F1 trong hộp thoại Khung và Tham chiếu:

Theo mặc định cho các dự án mới, khung được nhắm mục tiêu được đặt thành .NET Framework 4. IDE không hỗ trợ sửa đổi khung được nhắm mục tiêu, nhưng bạn có thể thay đổi nó theo cách thủ công. Trong tệp dự án (.vcxproj), khung được nhắm mục tiêu mặc định được biểu thị bằng phần tử thuộc tính v4.0. Để thay đổi khung được nhắm mục tiêu, hãy dỡ dự án, sử dụng trình soạn thảo văn bản để mở tệp dự án và sau đó thay đổi giá trị của phần tử thuộc tính từ v4.0 sang phiên bản khác được cài đặt trên máy chủ của bạn. Ví dụ: nếu bạn chỉ định v3.5, đại diện cho .NET Framework v3.5, Visual Studio 2008 SP1 phải được cài đặt . Lưu và đóng tệp, tải lại dự án và xác minh rằng khung mục tiêu được hiển thị trong trang thuộc tính. *

Điều đó không chính xác khủng khiếp đối với các dự án được chuyển đổi, bạn sẽ phải tự thêm <TargetFrameworkVersion>phần tử. Đặt nó trong Nhóm tài sản có nhãn "Globals":

  <PropertyGroup Label="Globals">
    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
    <others...>
  </PropertyGroup>

Câu chuyện sẽ khác khi bạn sử dụng VS2012 trở lên, phiên bản đầu tiên của VS có được cài đặt Bộ công cụ nền tảng trong trang Thuộc tính chung. Sau đó, bạn phải chọn "v90" để có bản dựng phù hợp nhắm mục tiêu 3.5. Tuy nhiên, thật vụng về, bạn phải cài đặt tất cả các phiên bản trung gian của VS trên máy để có sẵn lựa chọn đó.

Tại sao bạn cần cài đặt VS2008 yêu cầu một lời giải thích. Vấn đề cốt lõi là thư viện thời gian chạy C (msvcrt100.dll trở lên) chứa mã .NET để hỗ trợ thực thi mã được quản lý. Chi tiết quan trọng là trình khởi tạo mô-đun đảm bảo CRT được khởi tạo chính xác trong chương trình sử dụng mã C ++ / CLI. Mã đó luôn nhắm mục tiêu .NET 4 và vì nó được đưa vào msvcrt100.dll (trở lên) nên bạn luôn có một sự phụ thuộc mạnh mẽ vào thời gian chạy v4.0.30319. Bạn chỉ có thể có một phụ thuộc thuần v2.0.50727 khi bạn sử dụng thời gian chạy C cũ, msvcrt90.dll. Bạn chỉ có thể chắc chắn rằng bạn có một phụ thuộc msvcrt90.dll khi bạn sử dụng các tệp #include của trình biên dịch của VS2008.

Thực tế khó khăn là rất cần thiết để sớm chuyển sang .NET 4, bạn sẽ phải vật lộn với các vấn đề xây dựng như thế này nếu bạn không. Có rất ít trở ngại thực tế cho điều đó, .NET 4 được cung cấp miễn phí rộng rãi cho tất cả các mục tiêu bạn tưởng tượng. Vượt qua FUD có liên quan đến việc chuyển sang phiên bản thời gian chạy cao hơn thường chỉ là vấn đề thực sự. Không có lý do cho sự sợ hãi và nghi ngờ, nó ổn định.


8
Bây giờ tôi đã thực hiện các bước này nhưng bây giờ tôi gặp lỗi "MSB8009: .NET Framework 2.0 / 3.0 / 3.5 nhắm mục tiêu bộ công cụ nền tảng v90. Vui lòng đảm bảo rằng Visual Studio 2008 đã được cài đặt trên máy". Tôi không có VS2008.
codymanix

8
Trích dẫn câu trả lời của tôi: "Visual Studio 2008 SP1 phải được cài đặt". Bạn đang thiếu các công cụ xây dựng cần thiết.
Hans Passant

2
Có thể bạn cũng sẽ cần phải xóa tập tin .suo và mở lại giải pháp. Như nó là trong trường hợp của tôi.
alehro

Tôi đã làm việc này đơn giản bằng cách cài đặt Visual Studio 2008 express (miễn phí). Tôi thực sự đã có rất nhiều lỗi khi tôi thay đổi bộ công cụ nền tảng thành v90. Quay trở lại v100 đã sửa tất cả!
simon.d

4
Khi tạo .NET Framework 4.0 - các chương trình sử dụng hỗn hợp C ++ / CLI và C # bằng Visual Studio 2010, cài đặt .NET Framework 4.5 (hoặc Visual Studio 2013, đi kèm với .NET Framework 4.5) dẫn đến các dự án C ++ / CLI trong VS 2010 sẽ được xây dựng so với 4.5 thay vì 4.0 trước đây. Khi bạn có các dự án C # được xây dựng dựa trên 4.0 trong cùng một giải pháp tham chiếu các dự án C ++ / CLI, điều này sẽ phá vỡ. Chèn <TargetFrameworkVersion> v4.0 </ TargetFrameworkVersion> trong các tệp vcxproj của các dự án C ++ / CLI sẽ giải quyết vấn đề này. \ o /
Daniel Albuschat

18

Có, có thể thay đổi mục tiêu ngay cả đối với các dự án C ++ được quản lý:

Thay đổi Target .NET Framework cho C ++ / CLI (VS 2010) Để thay đổi phiên bản .NET Framework cho các dự án C ++ / CLI (VS 2010)

Nhấp chuột phải vào dự án trong Solution Explorer và nhấp Unload dự án Nhấp chuột phải vào dự án chưa tải trong Solution Explorer và chọn Edit <projectname>.vcxprojTrong dự án tệp định vị tệp XML <PropertyGroup Label="Globals">Trong nút định vị nút đó <TargetFrameworkVersion>(nếu nút không thể tìm thấy, hãy thêm nó) Văn bản bên trong của nút xác định khung mục tiêu. Nó có thể là v2.0, v3.0, v3.5 hoặc v4.0 Lưu tệp vcxproj và đóng tệp Nhấp chuột phải vào dự án chưa tải trong Solution Explorer và nhấp vào Tải lại ví dụ dự án <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>

Lưu ý: Các bước này chỉ áp dụng cho Visual Studio 2010 vì nó sử dụng định dạng mới của các tệp dự án C ++.

Nguồn trên MSDN: Cách: Thay đổi Target .NET Framework


5

bởi một người dùng ẩn danh:

. tài sản dự án. VS2010 thực sự nên đưa ra một cảnh báo về điều này, bởi vì hiện tại nó xuất hiện như bạn mặc dù bạn có thể nhắm mục tiêu .NET 3.5 với bộ công cụ v100 mà bạn không thể.


Điều này là do đa nhắm mục tiêu chỉ cho phép bạn nhắm mục tiêu V2.0, 3.0, 3.5 và 4.0; Các phiên bản 1.x của .Net không thể được nhắm mục tiêu theo cách này
Jeroen Landheer

0

Trong VS 2010 nếu bộ công cụ được cài đặt, hãy chuyển đến thuộc tính dự án-> thuộc tính cấu hình-> chung và thay đổi Bộ công cụ nền tảng từ v90 thành v100.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.