2011-08-20 49 views

Trả lời

47

Tệp dự án (.vcproj/.vcxproj) chứa các cài đặt về cách biên dịch mã của bạn thành tệp DLL hoặc tệp nhị phân hoặc một thứ khác mà trình liên kết có thể tập hợp thành một đơn vị. Tệp dự án chỉ là tệp xml chứa cài đặt trình biên dịch, cài đặt trình liên kết và mô tả những tệp bạn muốn biên dịch.

Tệp giải pháp là tệp văn bản nhóm nhiều tệp dự án lại với nhau.

Vì vậy, nếu bạn nghĩ về nó như một cái cây, sau đó bạn đã có một bức tranh tinh thần tốt đẹp của nó như thế này:

.sln 
    .vcproj 
     .h 
     .h 
     .cpp 
     .cpp 
    .vcxproj 
     .h 
     .h 
     .cpp 
     .cpp 
    .csproj 
     .cs 
+2

'* .vcxproj' là Visual Studio 2010 trở lên. '* .vcproj' là Visual Studio 2008 trở xuống. Làm thế nào có thể một Visual Studio {2005 | 2008} giải pháp chứa một tập tin dự án Visual Studio 2010? Ngoài ra, hãy xem [Xây dựng các thay đổi hệ thống] (https://msdn.microsoft.com/en-us/library/ee862524.aspx) trên MSDN. – jww

0

Visual Studio cho phép nhiều dự án trong một giải pháp. Dữ liệu những gì các dự án nằm trong một giải pháp nằm trong tệp sln (solution).

5

Tóm lại: một là dành cho giải pháp và giải pháp kia dành cho dự án và giải pháp có thể chứa nhiều dự án.

9

Tệp giải pháp và tệp dự án ở định dạng XML và mô tả các phần của dự án của bạn cũng như quan hệ, cấu hình của chúng và v.v. Trong thực tế, cả hai tệp này đều đơn giản là các kịch bản MSBuild (được chạy qua MSBuild khi bạn đoán nó, xây dựng dự án của bạn.)

Điều này có nghĩa là chúng dễ dàng thao tác bằng tay nếu cần (mặc dù đây là một trường hợp hiếm hoi) và cũng cho phép thêm các phần tùy chỉnh vào kịch bản lệnh xây dựng, tạo tập lệnh xây dựng tùy chỉnh cho MSBuild có thể bao gồm tệp giải pháp, trong số những thứ khác hoặc chỉ đơn giản là tự động tạo tập lệnh truyền tệp giải pháp (hoặc dự án) cho MSBuild , ví dụ, về kiểm tra kiểm soát phiên bản.

Sự khác biệt giữa tệp giải pháp và tệp dự án là tệp dự án chứa thông tin cụ thể cho dự án, không biết giải pháp của nó (mặc dù, Visual Studio sẽ tra cứu phân cấp ở mức độ nào đó khi mở một dự án, nếu có một dự án); tệp giải pháp nhận thức được tất cả các dự án là một phần của rằng giải pháp và tham chiếu từng giải pháp (chẳng hạn như thư mục tệp, nếu bạn thích, nhưng với các dự án), nó cũng chứa thông tin/cấu hình trên toàn bộ giải pháp. được áp dụng cho tất cả các dự án trong giải pháp.

Như được chỉ ra bởi Hans Passant, có một ngoại lệ: các tệp cho các dự án C++ trước VS2010 không phải là tệp XML MSBuild, nhưng thay vào đó là format documented by Microsoft on MSDN.

+2

Tệp .vcproj không phải là tập lệnh msbuild. Không cho đến khi VS2010's .vcxproj –

+0

@Hans Passant: Thông tin hữu ích đó, tôi không biết; Tôi đã tìm kiếm nhanh và có [trang tham khảo] này (http://msdn.microsoft.com/en-us/library/2208a1f2 (v = VS.90).aspx) - cảm ơn vì sự đóng góp. –

+2

Tôi biết đây là một chuỗi cũ nhưng ... Tệp SLN không phải là định dạng XML. có nó là một tệp văn bản nhưng không có phần tử XML nào trong tệp. –

5

Một tập tin .vcproj chứa thông tin về CÁCH để biên dịch mã nguồn cho một mục tiêu (chủ yếu là , một tệp thực thi). Trong nhiều trường hợp, nó là rất quan trọng để có các tập tin dự án để biên dịch thành công, do đó, không xóa nó. Nó có thể so sánh với một tệp .dsp (Visual Studio 6), tệp .prj (trình biên dịch Borland) hoặc một trình biên dịch Makefile (Unix, GNU) và chứa các đường dẫn và trình biên dịch/tùy chọn dòng lệnh liên kết.

Tệp .sln chỉ đơn thuần là tập hợp nhiều tệp .vcproj. Vì Visual Studio có thể tự động tạo một nếu không có, không cần phải giữ nó để phân phối hoặc lưu trữ. Đó là sự kế thừa của một tập tin .dsw (Visual Studio 6). Tên của nó "Tập tin giải pháp" là IMHO gây hiểu nhầm.

+1

Các tệp giải pháp chứa cây phụ thuộc xây dựng liên kết dự án được định cấu hình theo cách thủ công, do đó bạn sẽ không muốn xóa tệp giải pháp bao gồm nhiều dự án. – GeePokey

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