2012-03-07 7 views
24

Tôi đã tự hỏi: sự khác biệt giữa việc sử dụng msbuild và devenv khi biên dịch các giải pháp từ dòng lệnh là gì?MSBuild vs devenv cho dòng lệnh xây dựng

Một điều rõ ràng nhận thấy là msbuild không xây dựng các dự án phụ thuộc không có trong giải pháp, trong khi devenv thì không.

Còn cách nào khác không? Có một số cờ đặc biệt có thể chuyển đến msbuild để làm cho nó khớp với chính xác devenv build không?

P.S. Tôi đang sử dụng Visual Studio 2010 SP1

+1

Sau khi tất cả các cuộc gọi devenv msbuild thực hiện việc xây dựng! –

Trả lời

9

Theo MSDN Blog Entry này họ cố gắng giảm thiểu sự khác biệt, nhưng những tồn tại (tức là sử dụng một biên dịch C# tích hợp thay vì csc.exe hoặc đặt thuộc tính BuildingInsideVisualStudio) chủ yếu được thực hiện để tối ưu hóa hiệu suất của các bản dựng.

4

Tôi đã trải qua một dự án trong một nhóm đa lớp: nhà phát triển, người thử nghiệm, người triển khai. MSBuild là công cụ chính của những người triển khai: họ có thể biên dịch và biên dịch lại, chỉ cần thiết lập các tham số xây dựng chỉnh sửa tệp cấu hình xml của MSBuild mà không cần mở devenv. Trong thực tế, họ thường sử dụng MSBuild trong môi trường trước khi prod, nơi không có devenv cả.

Nant là công cụ tương tự của Apache Foundation.

Đối biết thêm thông tin có một cái nhìn ở đây:

20

Ưu điểm chính của MSBuild là bạn không cần phải có cài đặt Visual Studio.

Một hạn chế của MSBuild là nó không hỗ trợ xây dựng các dự án thiết lập Visual Studio (.vdproj).

(Bạn có thể làm việc này bằng cách defining an exec task which calls devenv, nhưng sau đó bạn vẫn cần Visual Studio.)

4

Một khác biệt lớn là msbuild có một số tùy chọn không tồn tại cho devenv. Theo như tôi có thể nói, không có cách nào để tăng cấp chi tiết cho devenv nhưng bạn có thể tăng tính cách rườm rà cho msbuild bởi tùy chọn:

/v:diag 
1

tôi gặp phải một trường hợp devenv đã viết một thông báo lỗi khi một tập tin dự án là còn thiếu, nhưng vẫn trả về 0. Ngược lại, msbuild trả về một giá trị khác. Tôi đã chuyển makefile sang sử dụng msbuild vì vậy chúng tôi sẽ không bỏ qua lỗi.