Sự khác biệt giữa Giải pháp xây dựng, Giải pháp xây dựng lại và Giải pháp sạch trong Visual Studio?


1137

Sự khác biệt giữa Giải pháp xây dựng, Giải pháp xây dựng lại và Giải pháp sạch trong Visual Studio là gì?

Khi nào là thời điểm thích hợp để sử dụng mỗi một trong số này?




2
Là xây dựng lại giống như sạch sau đó xây dựng?
Đại tá Panic

@ColonelPanic có
Alan Birtles

Câu trả lời:


921
  • Giải pháp xây dựng sẽ thực hiện một bản dựng gia tăng: nếu nó không nghĩ rằng nó cần xây dựng lại một dự án, thì nó sẽ không. Nó cũng có thể sử dụng các bit được xây dựng một phần của dự án nếu chúng không thay đổi (tôi không biết nó mất bao xa)
  • Giải pháp xây dựng lại sẽ làm sạch và sau đó xây dựng giải pháp từ đầu, bỏ qua mọi thứ đã làm trước đó. Sự khác biệt giữa cái này và "Clean, theo sau là Build" là Rebuild sẽ dọn sạch sau đó xây dựng từng dự án, từng dự án, thay vì làm sạch tất cả và sau đó xây dựng tất cả.
  • Giải pháp sạch sẽ loại bỏ các tạo phẩm xây dựng từ bản dựng trước. Nếu có bất kỳ tệp nào khác trong thư mục đích xây dựng (bin và obj) thì chúng có thể không bị xóa, nhưng các tạo phẩm xây dựng thực tế là. Tôi đã thấy hành vi cho sự khác biệt này - đôi khi xóa khá kỹ lưỡng và đôi khi không - nhưng tôi sẽ cho VS lợi ích của sự nghi ngờ vào lúc này :)

(Các liên kết đến các chuyển đổi dòng lệnh devenv.exe , nhưng chúng thực hiện tương tự như các mục menu.)


2
@womp: Không có trong dự án tôi vừa xem. Nó vẫn có tất cả các hội đồng ở đó ...
Jon Skeet

1
@Jon - kì lạ. Tôi không nhớ là sạch sẽ không bao giờ dọn dẹp những thư mục đó. Tôi đang làm điều đó ngay bây giờ và nó đang xóa sạch tất cả các tập tin dll và .pdb. Chắc chắn để lại rác ReSharper của tôi một mình.
vào

156
Cá nhân tôi thấy "Giải pháp sạch" không có ích gì. Nếu tôi thực sự muốn nó sạch sẽ, xóa thủ công các thư mục bin và obj là cách tốt nhất. Thậm chí đã bị bắt gặp theo đuổi "lỗi" ảo - cho đến khi tôi làm điều đó. Sạch sẽ không đáng tin cậy.
Chris Rogers

7
nếu các tạo phẩm thực hiện theo cách khác thông qua các tạo phẩm xây dựng (ví dụ: một bản sao từ một nguồn khác được tích hợp dưới dạng msbuidltask trong cproj) thì hãy dọn sạch chúng. Điều này làm cho nó khá vô dụng, tôi thậm chí còn nói rằng nó nguy hiểm vì nó sẽ khiến bạn có cảm giác sạch sẽ.
Newtopian

4
@verdana: Đối với github, v.v., đơn giản hơn để có một .gitignoretệp tốt . Nhưng theo câu trả lời, Clean không phải lúc nào cũng thực hiện một công việc đặc biệt kỹ lưỡng theo kinh nghiệm của tôi.
Jon Skeet

455

Xây dựng giải pháp: Biên dịch các tệp mã (DLL và EXE) đã được thay đổi.

Rebuild: Xóa tất cả các tệp đã biên dịch và biên dịch lại chúng bất kể mã có thay đổi hay không.

Giải pháp sạch: Xóa tất cả các tệp đã biên dịch (tệp DLL và EXE).

Bạn có thể xem video YouTube này ( Visual Studio Build vs Rebuild vs. Clean (câu hỏi phỏng vấn C # có câu trả lời) ) trong đó tôi đã chứng minh sự khác biệt và dưới đây là các biểu diễn trực quan sẽ giúp bạn phân tích chi tiết hơn.

Xây dựng so với xây dựng lại

Sự khác biệt giữa Rebuild so với (Clean + Build), vì dường như cũng có một số nhầm lẫn xung quanh điều này:

Sự khác biệt là cách thức xây dựng và trình tự sạch xảy ra cho mọi dự án. Giả sử giải pháp của bạn có hai dự án, đó là pro proj1 và và pro pro22. Nếu bạn xây dựng lại, nó sẽ lấy ra pro proj1, dọn dẹp (xóa) các tập tin đã biên dịch cho ra pro proj1 và xây dựng nó. Sau đó, nó sẽ lấy dự án thứ hai là pro proj2, làm sạch các tập tin đã được biên dịch cho phần mềm proj2 và biên dịch trực tuyến.

Nhưng nếu bạn thực hiện một trò chơi dọn dẹp và xây dựng, thì trước tiên, nó sẽ xóa tất cả các tập tin đã biên dịch cho phần mềm proj1 và và proj2 và sau đó nó sẽ xây dựng một trò chơi đầu tiên sau đó là trò chơi tiên tiến.

Tái tạo Vs Clean


26
Cảm ơn bạn đã giải thích lý do tại sao Rebuild không luôn hoạt động và tôi thường cần dọn dẹp trước khi xây dựng.
Didier A.

4
Vâng, mô tả và sơ đồ thứ hai là rất hữu ích và rõ ràng. Nếu bạn có thể sửa chữa sơ đồ "bất hợp pháp", để Có chỉ đi đến một nơi, điều đó sẽ giúp ích. Tôi thực sự không thể hiểu những gì người ta đang cố nói, đặc biệt là với "Build ALL" trong "Rebuild".
Jon Coombs

@JonCoombs Vâng, tôi không nghĩ rằng sơ đồ đầu tiên đã nắm bắt chính xác những gì anh ấy nói trên video. Tôi nghĩ rằng hình ảnh tôi đã chèn là những gì Shivprasad đang nhắm đến.
ruffin

Theo tôi hiểu điều này, nếu bất kỳ tập tin nào thay đổi, dự án sẽ được dọn sạch trên một bản dựng thông thường, có nghĩa là nó sẽ không làm gì hoặc nó sẽ làm sạch và sau đó xây dựng dự án. Điều này có đúng không?
Rõ ràng hơn

147

Lấy từ liên kết này :

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.



1
Liên kết? Tôi nghĩ ý tưởng của một DLL, còn gọi là Thư viện liên kết động, là liên kết trong thời gian chạy?
Dag

7
"Trong thực tế, bạn không bao giờ cần phải làm sạch" <- Tôi gọi cho BS về việc này.
bến tàu7

2
piers7 sau đó bạn có thể cung cấp một lý do bạn sẽ cần phải làm sạch vs xây dựng lại?
PaulBinder


46

Build Solution - Xây dựng bất kỳ hội đồng nào đã thay đổi tập tin. Nếu một hội đồng không có thay đổi, nó sẽ không được xây dựng lại. Cũng sẽ không xóa bất kỳ tập tin trung gian.

Được sử dụng phổ biến nhất.

Giải pháp xây dựng lại - Xây dựng lại tất cả các hội đồng bất kể thay đổi nhưng để lại các tệp trung gian.

Được sử dụng khi bạn nhận thấy rằng Visual Studio không kết hợp các thay đổi của bạn trong phiên bản mới nhất. Đôi khi Visual Studio không mắc lỗi.

Giải pháp sạch - Xóa tất cả các tệp trung gian.

Được sử dụng khi tất cả những thứ khác không thành công và bạn cần dọn dẹp mọi thứ và bắt đầu làm mới.


25
Clean không làm một bản dựng.
Jon Skeet

3
@Jon Skeet - Học một cái gì đó mới mỗi ngày. Tôi đã thề rằng nó đã được xây dựng lại. Tôi đoán bộ nhớ của tôi không phải lúc nào cũng đáng tin cậy như tôi muốn.
Justin Niessner

16

Tôi chỉ nghĩ về Rebuild khi thực hiện Clean trước sau đó là Build. Có lẽ tôi sai ... ý kiến?


Điều này không có upvote (cho đến bây giờ) và theo các tài liệu (xem liên kết trong câu trả lời của Jon) điều này là hoàn toàn chính xác.
Tod

2
Tôi không nghĩ rằng nó làm. Tôi có một tình huống khi thực hiện Giải pháp sạch, tiếp theo là Giải pháp xây dựng hoạt động, nhưng thực hiện Giải pháp xây dựng lại không thành công. Đây là một giải pháp mới được tạo ra với 2 dự án (một dự án phụ thuộc vào nhau).
Cthutu

@Cthutu Xem câu trả lời của Shivprasad để biết chi tiết tạo nên sự khác biệt ở đây. Rebuild dọn dẹp và sau đó xây dựng từng dự án riêng lẻ, trong khi chạy Clean trước tiên hãy dọn sạch mọi thứ cùng một lúc, sau đó Build xây dựng tất cả cùng một lúc. Tôi đã chạy qua các trường hợp trong đó thay đổi này theo thứ tự sạch / xây dựng cũng tạo ra sự khác biệt giữa biên dịch và không biên dịch.
Sean

@Sean Có thể nguyên nhân là do thêm một dự án vào giải pháp của bạn file referencethay vì vì project referencevậy, lệnh xây dựng dự án không nhận ra rằng nó phải xây dựng một dự án nhất định trước một dự án khác và lắp ráp không tồn tại ở nơi cần có trong thời gian xây dựng?
Zack

14

Build Solution - Xây dựng bất kỳ hội đồng nào đã thay đổi tập tin. Nếu một hội đồng không có thay đổi, nó sẽ không được xây dựng lại. Cũng sẽ không xóa bất kỳ tập tin trung gian.

Giải pháp xây dựng lại sẽ làm sạch và sau đó xây dựng giải pháp từ đầu, bỏ qua mọi thứ đã làm trước đó

Clean Solution sẽ xóa tất cả các tệp đã biên dịch (tức là của EXE và DLL) khỏi thư mục bin / obj.


8

Xây dựng giải pháp sẽ xây dựng bất kỳ dự án trong giải pháp đã thay đổi. Rebuild xây dựng tất cả các dự án bất kể là gì, giải pháp sạch sẽ loại bỏ tất cả các tệp tạm thời đảm bảo rằng bản dựng tiếp theo hoàn tất.


6

Xây dựng giải pháp - Giải pháp xây dựng sẽ xây dựng ứng dụng của bạn với việc xây dựng số lượng dự án đang có bất kỳ thay đổi tệp nào. Và nó không xóa bất kỳ tệp nhị phân hiện có và chỉ thay thế các tập hợp được cập nhật trong thư mục bin hoặc obj.

Giải pháp xây dựng lại - Giải pháp xây dựng lại sẽ xây dựng toàn bộ ứng dụng của bạn với việc xây dựng tất cả các dự án có sẵn trong giải pháp của bạn với việc làm sạch chúng. Trước khi xây dựng, nó xóa tất cả các tệp nhị phân từ thư mục bin và obj.

Giải pháp sạch - Giải pháp sạch chỉ là xóa tất cả các tệp nhị phân khỏi thư mục bin và obj.


5

Xây dựng giải pháp

Điều này sẽ thực hiện một bản dựng gia tăng. Nói cách khác, nó sẽ chỉ xây dựng các tệp mã đã thay đổi. Nếu họ không thay đổi, các tập tin sẽ không được chạm vào.

Xây dựng lại giải pháp

Điều này sẽ xóa tất cả các tệp hiện được biên dịch (ví dụ: exe và DLL) và sẽ xây dựng mọi thứ từ đầu, bất kể có thay đổi mã trong tệp hay không.

Thực đơn giải pháp sạch

Menu này sẽ xóa tất cả các tệp đã biên dịch (tức là của EXE và DLL) khỏi thư mục bin / obj.

Tái tạo = Làm sạch + Xây dựng


4

Một điều quan trọng mà tôi nghĩ mọi người đang bỏ qua là Xây dựng và Làm sạch là cả hai nhiệm vụ được thực hiện dựa trên kiến ​​thức về Dự án / Giải pháp của Visual Studio. Tôi thấy rất nhiều phàn nàn rằng Clean không hoạt động hoặc để lại các tệp còn sót lại hoặc không đáng tin, trong khi thực tế, những lý do bạn nói nó không đáng tin thực sự khiến nó đáng tin hơn.

Clean sẽ chỉ xóa (sạch) các tệp và / hoặc thư mục mà Visual Studio hoặc trình biên dịch thực tế đã tạo. Nếu bạn sao chép các tệp hoặc cấu trúc tệp / thư mục của riêng bạn được tạo từ một công cụ hoặc nguồn bên ngoài, thì Visual Studio không "biết chúng tồn tại" và do đó, không nên chạm vào chúng.

Bạn có thể tưởng tượng nếu hoạt động Clean về cơ bản thực hiện một "del *. *" Không? Điều này có thể là thảm họa.

Build thực hiện một biên dịch trên các dự án thay đổi hoặc cần thiết.

Rebuild thực hiện một biên dịch bất kể thay đổi hoặc những gì cần thiết.

Clean sẽ xóa các tệp / thư mục mà nó đã tạo trong quá khứ, nhưng ban đầu để lại mọi thứ mà nó không có gì để làm.

Tôi hy vọng điều này xây dựng một chút và giúp đỡ.


4

Tôi có aa dung dịch trắng BuildRebuildCleanvà ba thư viện lớp Models, Repository, Notification.

Tôi sử dụng ModelsRepositorytrong Notificationthư viện lớp.

Sau đó:

  • Xây dựng giải pháp Xây dựng tăng dần và chỉ biên dịch các tệp được thay đổi. Nếu một hội đồng không có thay đổi, nó sẽ không được xây dựng lại. Ngoài ra, nó sẽ không xóa bất kỳ tập tin trung gian. Nếu Sửa đổi một số mã trong Modelsdự án thư viện, thì giải pháp BUILD. Trong ảnh chụp màn hình bên dưới, hãy tham khảo dấu thời gian của DLL, EXE được cập nhật trong ModelsNotificationthư viện.

nhập mô tả hình ảnh ở đây

  • Giải pháp xây dựng lại Xóa tất cả các tệp đã biên dịch và biên dịch tất cả bất kể thay đổi, bỏ qua mọi thứ đã thực hiện trước đó. Nhấp chuột phải vào tên giải pháp BuildRebuildClean. Những gì nó làm là xóa tất cả các tập hợp, EXE và các tệp được giới thiệu để biên dịch lại.

nhập mô tả hình ảnh ở đây

  • Clean Solution Xóa tất cả các tệp được biên dịch, trung gian (ví dụ: EXE và DLL) khỏi thư mục bin / obj.

nhập mô tả hình ảnh ở đây


2

Tất cả những gì tôi biết là Clean không thực hiện những gì "làm sạch" đã từng làm - nếu tôi Làm sạch một giải pháp, tôi sẽ mong đợi nó xóa các tập tin / thư mục obj và bin mà nó xây dựng giống như là một kiểm tra mới về nguồn. Theo kinh nghiệm của tôi, mặc dù tôi thường thấy những lần mà Clean and Build hoặc Rebuild vẫn tạo ra các lỗi lạ trên nguồn được biết để biên dịch và những gì được yêu cầu là xóa thủ công các thư mục bin / obj, sau đó nó sẽ xây dựng.


Đặc biệt trong các dự án Xamarin tôi cần xóa các thư mục bin và obj thủ công để giải quyết các lỗi biên dịch lạ
Miguel Febres

1

Xây dựng giải pháp chỉ xây dựng những dự án đã thay đổi trong giải pháp và không ảnh hưởng đến các hội đồng không thay đổi,

ReBuild trước tiên làm sạch, tất cả các hội đồng từ giải pháp và sau đó xây dựng toàn bộ giải pháp bất kể thay đổi được thực hiện.

Làm sạch, đơn giản là làm sạch dung dịch.



0

Điều này chỉ liên quan đến tùy chọn "Build Solution".

Tôi đã hoàn toàn chán ngấy với việc Visual Studio không có khả năng làm sạch các giải pháp và đã viết công cụ nhỏ này sẽ làm điều đó cho bạn.

Trước tiên, đóng giải pháp của bạn trong VS và kéo thư mục của nó từ Windows Explorer vào ứng dụng này hoặc vào biểu tượng của nó. Tùy thuộc vào cài đặt ở dưới cùng của cửa sổ, nó cũng có thể xóa nội dung bổ sung, điều này sẽ giúp ích nếu bạn cố tải lên giải pháp của mình lên GitHub hoặc chia sẻ với người khác:

nhập mô tả hình ảnh ở đây

Tóm lại, nó sẽ đặt tất cả các thư mục "Gỡ lỗi", Intellisense và các bộ nhớ cache khác có thể được xây dựng lại bởi VS vào Thùng rác cho bạn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.