2009-08-07 44 views
259

sự khác biệt giữa chỉ là một là gì Rebuild và làm một sạch + Xây dựng trong Visual Studio 2008? Là Sạch + Xây dựng khác nhau sau đó thực hiện Làm sạch + Xây dựng lại?Sự khác nhau giữa Rebuild và sạch + Xây dựng trong Visual Studio

+4

[Đây là một bài đăng hay với chi tiết] (http://conceptf1.blogspot.com/2013/11/visual-studio-clean-build-and-rebuild-solution.html) –

Trả lời

268

Rebuild = Sạch + Xây dựng

chi tiết đáng chú ý:

  1. Đối với một giải pháp đa dự án "xây dựng lại giải pháp" làm một "sạch" theo sau là một "xây dựng" cho từng dự án (có thể song song). Trong khi một "giải pháp sạch" tiếp theo là một "giải pháp xây dựng" đầu tiên 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 việc sắp xếp 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.

  2. Tất cả ba hành động tương ứng với mục tiêu MSBuild. Vì vậy, một dự án có thể ghi đè lên hành động Rebuild để làm điều gì đó hoàn toàn khác.

+1

Vì vậy, bạn đang nói rằng * Xây dựng lại * là ** chính xác ** giống với * Làm sạch * theo sau là * Bản dựng *? Đó là loại suy nghĩ của tôi, nhưng tôi không chắc. –

+40

Trừ khi xây dựng lại làm sạch và xây dựng lại từng dự án một. Clean + Build dọn dẹp tất cả chúng và sau đó xây dựng tất cả chúng. Tạo sự khác biệt chủ yếu là nếu bạn nhấp vào nó một cách tình cờ :) – Eugene

+22

Ngoại trừ việc không đảm bảo rằng chúng giống nhau. Xem câu trả lời của JaredPar dưới đây kết hợp với Earl là toàn bộ hình ảnh. Vì Rebuild thực hiện từng dự án, bạn có thể có "trường hợp góc" khi thông tin phụ thuộc của bạn bị rối tung và bạn nhận được dự án xây dựng B của dự án cũ A sau đó xây dựng lại A, sau đó xây dựng lại C. v.v. Một giải pháp đầy đủ Sạch sẽ theo sau là một xây dựng giải pháp đầy đủ sẽ bắt tình trạng này trong khi xây dựng lại sẽ không. Vì vậy, bạn hoang tưởng và mệt mỏi hơn, bạn càng có lợi cho Clean sau đó Build. –

154

Bá tước chính xác là 99% thời gian Rebuild = Clean + Build.

Nhưng chúng không được bảo đảm giống nhau. 3 hành động (xây dựng lại, xây dựng, làm sạch) đại diện cho các mục tiêu MSBuild khác nhau. Mỗi trong số đó có thể được overriden bởi bất kỳ tập tin dự án để làm các hành động tùy chỉnh. Vì vậy, nó hoàn toàn có thể cho một người nào đó để ghi đè xây dựng lại để làm một số hành động trước khi bắt đầu một sạch + xây dựng (hoặc để loại bỏ chúng hoàn toàn).

Rất nhiều trường hợp góc nhưng chỉ ra ngoài vì các cuộc thảo luận nhận xét.

+0

Nếu bạn thêm các hành động xây dựng để di chuyển các tệp .dll đến một vị trí mới, bạn có thể nhận được kết quả xây dựng 'xấu' bằng cách thực hiện xây dựng lại. Nếu bạn kết hợp vb.net và C# dự án, mọi thứ trở nên tồi tệ hơn, các nhà thiết kế biểu mẫu bị hỏng và không làm việc goto. – CodingBarfield

+0

+1 Lưu ý rằng hành vi xây dựng lại dường như không nhất quán giữa các ngôn ngữ liên quan đến các phụ thuộc: http://stackoverflow.com/questions/12163080/vs2010-lnk1181-when-rebuilding-project-with-dependency – lesscode

12

Từ http://www.cs.tufts.edu/r/graphics/resources/vs_getting_started/vs_getting_started.htm, (chỉ cần googled nó):

xây dựng nghĩa biên dịch và liên kết chỉ các tập tin nguồn mà đã thay đổi kể từ khi xây dựng ngoái, trong khi xây dựng lại phương tiện biên dịch và liên kết tất cả các file nguồn cho dù họ đã 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 đích của dự án có thể bị mất đồng bộ và việc xây dựng lại là cần thiết để làm cho việc 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.

Xây dựng hoặc xây dựng lại Giải pháp 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 Xây dựng hoặc xây dựng lại 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. Để thiết lập 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 Set as startUp project. Tên dự án hiện được in đậm. Vì các giải pháp bài tập về nhà thường chỉ có một dự án, Giải pháp xây dựng hoặc xây dựng lại có hiệu quả giống như Xây dựng hoặc Xây dựng lại.

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 các tệp nguồn còn lại của bạn ở trạng thái không đầy đủ sẽ ngăn chặ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.

44

1 Mỗi dự án, xây dựng lại dự án = (Dự án sạch + Dự án xây dựng).

2 Per Solution, Rebuild Sln = foreach project (Dự án sạch + Dự án xây dựng)!= Clean Sln + Build Sln

Giả sử bạn có một Sln, chứa proj1, proj2 và proj3.

Rebuild SLN = (Clean proj1 -> Xây dựng Proj1) + (Clean proj2 -> Xây dựng Proj2) + (Clean proj3 -> Xây dựng Proj3)

sạch SLN + Xây dựng SLN = (Clean proj1 + proj2 sạch + proj3 sạch) -> (Build proj1 + Xây dựng proj2 + Xây dựng proj3)

-> có nghĩa là sê-ri, + có nghĩa là đồng thời

do đó là một cơ hội khi bạn gửi rất nhiều thay đổi mã trong khi bạn không cấu hình các phụ thuộc của dự án một cách chính xác, Rebuild Sln sẽ khiến một số proj của bạn liên kết với một thư viện cũ vì tất cả các bản xây dựng không được đảm bảo sau khi đã dọn dẹp (trong trường hợp này là Cl EAN SLN + Xây dựng SLN sẽ đưa ra một lỗi liên kết, và cho bạn biết rằng ngay lập tức, thay vì đem lại cho bạn một ứng dụng với hành vi kỳ quặc)

+6

Cái này là câu trả lời chính xác nhất, vì nó giải thích tại sao đôi khi tôi không thể xây dựng lại, nhưng có thể làm sạch + xây dựng. –

3

Từ this blog post mà tác giả liên kết như a comment on this question:

Thật Không! !! chúng không bằng nhau.

Sự khác biệt là trong các dự án chuỗi đượ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 sẽ 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à sạch sẽ và sau đó xây dựng sau dự án B sẽ được sạch sẽ và sau đó xây dựng và như vậy.

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