2012-04-20 2 views
15

Tôi và đối tác của tôi đều đang chia sẻ một giải pháp C++ thông qua lật đổ.Chia sẻ giải pháp C++ giữa Visual Studio 2010 và 11

Ông đang sử dụng Visual Studio 11 và tôi đang sử dụng Visual Studio 2010.

Sau khi lần đầu tiên ông cam kết và tôi cập nhật, tôi nhận được lỗi sau:

Error 31 error MSB8008: Specified platform toolset (v110) is not installed or invalid. Please make sure that a supported PlatformToolset value is selected.

cũng có, trong tập tin tiêu đề tôi nhận được lỗi sau trên #include <stdio.h>:

error: cannot open source file "stdio.h"

Tôi đoán đây là vấn đề tương thích. Làm thế nào chúng ta có thể giải quyết điều này?

+0

bạn nên sử dụng một cái gì đó như CMake và mỗi tạo giải pháp riêng cho phiên bản VS mong muốn – relaxxx

Trả lời

30

Trong Visual Studio 11 có một tùy chọn thuộc tính cho phép bạn chỉ định bộ công cụ nền tảng.

vBulletin Toolset V110 được sử dụng bởi mặc định nếu bạn tạo một dự án mới bắt đầu từ Visual Studio 11, nhưng nếu có thể thay đổi nó để V100 đó là một trong những sử dụng bởi Visual Studio 2010.

Toolset option

+0

Khi bạn mở một dự án 2010 hiện tại trong VC++ 2012 lần đầu tiên, nó sẽ "hữu ích" đặt bộ công cụ nền tảng thành v110. Đó là cách tôi nhận được Q và A trên Stackoverflow - cố gắng tìm ra cách VC++ 2012 đã phá vỡ dự án của tôi mặc dù quảng cáo một "chuyến đi khứ hồi liền mạch". Thông báo lỗi chỉ nói với tôi để chỉ định bộ công cụ nền tảng chính xác mà không đưa ra bất kỳ dấu hiệu nào về ý nghĩa của nó hoặc cách chỉ định nó. Tất nhiên tài liệu của Microsoft là vô dụng. Nhưng googling trên DuckDuckGo.com cũ tốt và nhấp vào hit Stackoverflow lưu trong ngày. –

+0

P.s. Ai biết một số chuyến đi khứ hồi có đường nối? Trong mọi trường hợp, mục Platform Toolset hiển thị dưới VS 2010 và thiết lập nó trở lại v100 hoạt động tốt. –

+2

Lưu ý rằng cài đặt trở lại v100 yêu cầu cài đặt VS2010. – JohnW

3

tệp .sln và .vcxproj được lưu trong Visual Studio 11 không tương thích ngược với VS2010. Ngay cả khi họ đã tương thích, cuối cùng bạn sẽ bước qua một mã được compilable trong VS11 nhưng không phải trong VS10.

Cách tốt nhất (và có thể là duy nhất) là đồng ý sử dụng chính xác cùng một môi trường phát triển.

+1

Như tôi đã hiểu, nếu bạn có bản cập nhật tự động chạy, Microsoft vá VC2010 sao cho nó và VC2012 sử dụng cùng một định dạng.Tôi thấy "Platform Toolset" bây giờ trong VC++ 2010, và tôi không nhớ nhìn thấy nó ở đó trước đây. –

0

Một hơi muộn trong cuộc thảo luận, nhưng vì bạn đang sử dụng kiểm soát nguồn, bạn có thể xóa các tệp dự án và giải pháp khỏi kho lưu trữ và chỉ chia sẻ mã nguồn. Rõ ràng, nếu bạn thêm các mô-đun mới và như vậy cho một dự án, bạn sẽ phải tự thêm chúng vào các giải pháp khác, nhưng ít nhất bạn sẽ không phải lo lắng về sự không tương thích này. Nếu bạn muốn truy cập vào nó, ứng dụng có thể được xây dựng từ dòng lệnh bằng cách sử dụng trình biên dịch và trình chuyển đổi liên kết, có xu hướng tương thích hơn nhiều giữa các phiên bản. Cuối cùng, bạn có thể sử dụng một công cụ xây dựng khác (bên cạnh MSBuild), vẫn tương thích trên các phiên bản studio.

Nếu bạn quyết định xóa tệp giải pháp và dự án, một điều cần cân nhắc là lưu bản sao của YourApp.sln gốc là YourApp.sln.2010. Sau đó, bạn sẽ có một cái gì đó để hạt giống giải pháp trong tương lai từ, nhưng cập nhật các dự án và giải pháp tất cả sẽ cần được thực hiện từ VS 2010 và tập tin sau đó sao chép vào phiên bản .2010 của họ và duy trì bằng tay.

Nếu SVN hỗ trợ bản vá, hoặc nếu bạn sẵn sàng chạy quilt bên ngoài (hoặc nếu bạn chuyển sang dùng mercurial, bạn có thể sử dụng phần mở rộng MQ), bạn có thể tạo tệp vá để chuyển đổi từ năm 2010 đến năm 2011 và loại bỏ (các) bản vá nâng cấp trước khi đồng bộ.

0

Giải pháp của Drake không hoạt động đối với tôi vì thuộc tính cho tất cả các dự án trong giải pháp đã được đặt chính xác thành v100. Tuy nhiên, sửa chữa đã làm việc là để làm sạch các bản xây dựng và loại bỏ tất cả các tệp khác không phải là tệp nguồn hoặc tệp dự án. Tôi nghĩ rằng nó có lẽ là loại bỏ các tập tin projname.vcxproj.user mà cố định nó, như có lẽ sở thích toolchain là bằng cách nào đó overriden trong sở thích của người dùng.