2010-11-15 13 views
10

Chỉ cần để làm cho nó rõ ràng hơn đối với tôi, tôi muốn hỏi các bạn điều kiện đúng (s) để có dự ánKhi nào bạn nên xây dựng lại thay vì xây dựng?

của bạn hoặc dung dịch Rebuildthay vìbuild trong Visual Studio?

Nếu tôi thuật lại nó: Tại sao MS cần tạo tùy chọn "Tái xây dựng TẤT CẢ" trong Visual Studio? Động cơ chính của họ là gì?

Cảm ơn!

Trả lời

7

DRY: Rebuild = Clean + Xây dựng cho từng dự án.

Bản dựng sẽ không xóa các kết quả đầu ra xây dựng trước đó. Việc xây dựng lại sẽ xóa chúng và xây dựng lại (một dự án tại một thời điểm nếu bạn đang ở trong một giải pháp: xoá proj1 \ bin \ Debug, xây dựng proj1, xoá proj2 \ bin \ Debug ...).

Trường hợp chính khi tôi thực hiện xây dựng lại (hoặc xây dựng sạch) là khi tôi cần cập nhật giải pháp phụ thuộc thứ ba của mình. Hãy xem cây thư mục sau:

 
    SOLUTION 
     |__Dependencies 
     |__PROJ_1 
     |__bin 
     |__obj 
     |__(code) 
     |__PROJ_2 
     |__bin 
     |__obj 
     |__(code) 

Nếu tôi thay đổi dlls của tôi trong Dependencies và không làm một xây dựng lại, VS (và MSBuild) vẫn sẽ sử dụng phiên bản dll trước đó là trong PROJ_N \ bin \ Debug (hoặc trong bin \ Release), vì thứ tự tra cứu phụ thuộc (xem http://www.beefycode.com/post/Resolving-Binary-References-in-MSBuild.aspx):

  1. tập tin từ dự án hiện tại - chỉ định bởi {CandidateAssemblyFiles}
  2. $(ReferencePath) - tài sản con đường tham khảo, mà xuất phát từ tập tin .USER.
  3. Đường dẫn từ chính mục được tham chiếu, được biểu thị bằng {HintPathFromItem}.
    ...

Các dll trong thư mục bin đi trong trường hợp tra cứu đầu tiên, dll trong thư mục Dependencies đi kèm trong trường hợp thứ hai ...

Trong trường hợp này tôi sẽ làm sạch (Gỡ lỗi), làm sạch (Release) và sau đó một xây dựng để loại bỏ tất cả các phiên bản trước đó trong thư mục bin. Tôi có thể hơi quá mức và việc xây dựng lại có thể là đủ nhưng tôi không chắc chắn vì các dll nằm trong thư mục Debug và trong thư mục Release ...

+0

Nói cách khác, 'Rebuild' =' Clean' + ' Xây dựng' – abatishchev

+0

Hầu hết thời gian và cho một dự án duy nhất, vâng. Xem http://stackoverflow.com/questions/1247457/difference-between-rebuild-and-clean-build-in-visual-studio-2008. –

+1

Trong Microsoft.Common.Targets của bạn, bạn có thể thấy rằng đối với một dự án Rebuild = BeforeRebuild; Dọn dẹp; $ (_ ProjectDefaultTargets); AfterRebuild; –

1

Đôi khi mọi thứ xảy ra sai và quá trình xây dựng không hoạt động.

Điều này xảy ra, ví dụ: khi tôi không cập nhật chính xác thư viện phụ thuộc mà sau đó không được sao chép chính xác vào đường dẫn bin của bản dựng. Có những ví dụ khác, không cần phải bận tâm.

Đó là khi tôi sử dụng xây dựng lại.