Sự khác biệt giữa chỉ một Rebuild và thực hiện Clean + Build trong Visual Studio 2008 là gì? Là Clean + Build khác nhau sau đó làm Clean + Rebuild ?
Sự khác biệt giữa chỉ một Rebuild và thực hiện Clean + Build trong Visual Studio 2008 là gì? Là Clean + Build khác nhau sau đó làm Clean + Rebuild ?
Câu trả lời:
Rebuild = Clean + Build (thường)
Chi tiết đáng chú ý:
Đối với giải pháp đa dự án, "xây dựng lại giải pháp" thực hiện "làm sạch" theo sau là "xây dựng" cho từng dự án (có thể song song). Trong khi đó, một "giải pháp sạch" theo sau là "giải pháp xây dựng" trước tiên sẽ làm sạch tất cả các dự án (có thể song song) và sau đó xây dựng tất cả các dự án (có thể song song). Sự khác biệt này trong chuỗi các sự kiện có thể trở nên quan trọng khi các phụ thuộc giữa các dự án đi vào hoạt động.
Tất cả ba hành động tương ứng với các mục tiêu MSBuild. Vì vậy, một dự án có thể ghi đè lên hành động Rebuild để làm một cái gì đó hoàn toàn khác.
Earl đúng là 99% thời gian Rebuild = Clean + Build.
Nhưng chúng không được đảm bảo giống nhau. 3 hành động (xây dựng lại, xây dựng, dọn dẹp) đại diện cho các mục tiêu MSBuild khác nhau. Mỗi trong số đó có thể được ghi đè bởi bất kỳ tệp dự án nào để thực hiện các hành động tùy chỉnh. Vì vậy, hoàn toàn có thể ai đó ghi đè lên việc xây dựng lại để thực hiện một số hành động trước khi bắt đầu xây dựng + sạch (hoặc xóa chúng hoàn toàn).
Rất nhiều trường hợp góc nhưng chỉ ra nó do các cuộc thảo luận bình luận.
Hãy xác định triển khai Rebuild mặc định theo các triển khai Clean and Build mặc định:
Mỗi dự án: Dự án xây dựng lại = Dự án sạch + Dự án xây dựng.
Mỗi giải pháp: Rebuild sln = foreach project in sln (Dự án sạch + Dự án xây dựng).
Lưu ý rằng do sự khác biệt về thứ tự thực hiện, Rebuild sln không giống với (Clean sln + Build sln) = (dự án foreach trong dự án Sln Clean) + (dự án foreach trong dự án Sln Build). Ngoài ra, "foreach" này có thể thực thi đồng thời, vì vậy các tác vụ khác nhau được phép chạy đồng thời trong hai kịch bản.
Giả sử bạn có một sln chứa proj1, proj2 và proj3.
Rebuild sln = (Clean proj1 + Build proj1) & (Clean proj2 + Build proj2) & (Clean proj3 + Build proj3)
Clean Sln + Build Sln = (Clean proj1 & Clean proj2 & Clean proj3) + (Build proj1 & Build proj2 & Build proj3)
+ có nghĩa là nối tiếp, & có nghĩa là đồng thời.
Vì vậy, nếu các phụ thuộc dự án không được cấu hình đúng, có thể khi bạn thực hiện Rebuild sln, một số dự án của bạn liên kết đến một lib cũ. Đó là bởi vì tất cả các hoạt động dọn dẹp không được đảm bảo hoàn thành trước khi quá trình xây dựng đầu tiên bắt đầu. Nếu bạn thực hiện Clean sln + Build sln, họ sẽ đưa ra lỗi liên kết và cho bạn biết điều đó ngay lập tức, thay vì cung cấp cho bạn một ứng dụng có hành vi kỳ quặc.
Từ http://www.cs.tufts.edu/r/graphics/resource/vs_getting_started/vs_getting_started.htmlm , (chỉ cần googled nó):
Build có nghĩa là biên dịch và chỉ liên kết các tệp nguồn đã thay đổi kể từ lần xây dựng trước, trong khi Rebuild có nghĩa là biên dịch và liên kết tất cả các tệp nguồn bất kể chúng có thay đổi hay không. Xây dựng là điều bình thường để làm và nhanh hơn. Đôi khi các phiên bản của các thành phần mục tiêu dự án có thể không đồng bộ hóa và xây dựng lại là cần thiết để xây dựng thành công. Trong thực tế, bạn không bao giờ cần phải làm sạch.
Build hoặc Rebuild Solution xây dựng hoặc xây dựng lại tất cả các dự án trong giải pháp của bạn, trong khi Build hoặc Rebuild xây dựng hoặc xây dựng lại dự án StartUp, "xin chào" trong ảnh chụp màn hình ở trên. Để đặt dự án StartUp, nhấp chuột phải vào tên dự án mong muốn trong tab Solution Explorer và chọn Đặt làm dự án StartUp. Tên dự án bây giờ xuất hiện in đậm. Vì các giải pháp bài tập về nhà thường chỉ có một dự án, Build hoặc Rebuild Solution thực sự giống như Build hoặc Rebuild.
Biên dịch chỉ biên dịch tệp nguồn hiện đang được chỉnh sửa. Hữu ích để nhanh chóng kiểm tra lỗi khi phần còn lại của tệp nguồn của bạn ở trạng thái không hoàn chỉnh sẽ ngăn việc xây dựng thành công toàn bộ dự án. Ctrl-F7 là phím tắt cho Biên dịch.
Từ bài đăng trên blog này mà tác giả đã liên kết như một nhận xét về câu hỏi này :
Thật ra là không !!! chúng không bằng nhau
Sự khác biệt là trong các dự án trình tự được làm sạch và xây dựng. Hãy nói rằng chúng tôi có hai dự án trong một giải pháp. Làm sạch và sau đó xây dựng sẽ thực hiện sạch cho cả hai dự án và sau đó xây dựng sẽ xảy ra riêng lẻ trong khi xây dựng lại dự án A sẽ nhận được và làm sạch và sau đó xây dựng sau dự án B đó sẽ sạch sẽ và sau đó xây dựng.