Visual Studio'da Build Solution, Rebuild Solution ve Clean Solution arasındaki fark nedir?


Yanıtlar:


921
  • Derleme çözümü artımlı bir derleme gerçekleştirir: bir projeyi yeniden oluşturması gerektiğini düşünmezse , olmayacaktır. Değişmediyse projenin kısmen oluşturulmuş bitlerini de kullanabilir (bunu ne kadar sürdüğünü bilmiyorum)
  • Çözümü yeniden oluştur ve daha önce yaptığı her şeyi görmezden gelerek çözümü sıfırdan oluşturur. Bu ve "Temiz, ardından Oluştur" arasındaki fark, Rebuild'in her projeyi temizleyip sonra her şeyi birer birer inşa edecek, hepsini temizleyip daha sonra inşa edeceğidir.
  • Temiz çözüm , yapı yapılarını önceki yapıdan kaldıracaktır. Derleme hedefi dizinlerinde (bin ve obj) başka dosyalar varsa bunlar kaldırılamaz, ancak gerçek derleme yapıları kaldırılır. Bu değişikliğin davranışını gördüm - bazen oldukça iyice ve bazen değil - ama VS'ye şu an için şüphenin yararını vereceğim :)

(Bağlantılar devenv.exe komut satırı anahtarlarına aittir , ancak menü öğeleriyle aynı işlevi görürler.)


2
@womp: Az önce baktığım projede değil. Hala orada bütün meclisler var ...
Jon Skeet

1
@Jon - tuhaf. Bu dizinleri temizlemeyen bir temiz hatırlamıyorum. Şu anda yapıyorum ve tüm .dll ve .pdb dosyalarını siliyor. Kesinlikle benim ReSharper önemsiz yalnız olsa bırakır.
Womp

156
Ben şahsen "Temiz Çözüm" yararsız daha bulundu. Ben ise gerçekten elle bin ve obj klasörleri silerek temiz istiyorum gitmek için bir yoldur. Ben bunu yapana kadar bile hayalet "hatalar" peşinde yakalandı. Temiz sadece güvenilir değil.
Chris Rogers

7
yapay nesneler yapı yapay yapılarından başka yollardan geçtiyse (örneğin, cproj'a msbuidltask olarak entegre edilmiş başka bir kaynaktan bir kopya) temiz bırakın. Bu da onu neredeyse işe yaramaz hale getiriyor, hatta yanlış bir temizlik hissi bırakacağından tehlikeli olduğunu bile söyleyebilirim.
Newtopian

4
@verdana: Github vb. için, düzgün bir .gitignoredosyaya sahip olmak daha kolaydır . Ama cevaba göre, Clean benim deneyimimde her zaman özellikle kapsamlı bir iş yapmıyor.
Jon Skeet

455

Derleme çözümü: Değiştirilen kod dosyalarını (DLL ve EXE) derler.

Yeniden oluştur: Kod değiştirilip değiştirilmediğinden bağımsız olarak derlenen tüm dosyaları siler ve yeniden derler.

Temiz çözüm: Derlenmiş tüm dosyaları (DLL ve EXE dosyası) siler.

Bu YouTube videosunu ( Visual Studio Build vs. Rebuild vs. Clean (cevaplarla birlikte C # görüşme soruları) ) görebilirsiniz.

Yeniden Oluşturma ve Yeniden Oluşturma

Rebuild ve (Clean + Build) arasındaki fark, çünkü bu konuda da bazı karışıklıklar var gibi görünüyor:

Fark, her proje için oluşturma ve temizleme dizisinin gerçekleşme şeklidir. Diyelim ki çözümünüzde “proj1” ve “proj2” olmak üzere iki proje var. Yeniden oluşturma yaparsanız "proj1" alır, derlenen dosyaları "proj1" için temizler (siler) ve derler. Bundan sonra ikinci projeyi alır "proj2", derlenmiş dosyaları "proj2" için temizler ve "proj2" derler.

Ancak bir “temiz” ve derleme ”yaparsanız, önce“ proj1 ”ve“ proj2 ”için derlenen tüm dosyaları silecek ve daha sonra ilk önce“ proj1 ”ve ardından“ proj2 ”oluşturacaktır.

Vs Clean'i yeniden oluştur


26
Rebuild'in neden her zaman işe yaramadığını açıkladığınız için teşekkür ederiz.
Didier

4
Evet, açıklama ve ikinci diyagram çok yararlı ve açıktı. "Yasadışı" akış şemasını düzeltebilirseniz, Evet yalnızca tek bir yere gider, bu yardımcı olur. Bunun ne demeye çalıştığını gerçekten anlayamıyorum, özellikle de "Yeniden Oluştur" altındaki "Build ALL" ile.
Jon Coombs

@JonCoombs Evet, ilk akış şemasının tam olarak videoda söylediklerini yakaladığını sanmıyorum. Ben düşünüyorum ben ekledikten görüntü Shivprasad amaçlayan buydu.
ruffin

Bunu anladığım gibi, herhangi bir dosya değiştiyse, proje düzenli bir yapıda temizlenir, yani ya hiçbir şey yapmaz ya da projeyi temizler ve sonra oluşturur. Bu doğru mu?
Daha

147

Alındığı bu linke :

Oluştur, yalnızca son derlemeden bu yana değişen kaynak dosyaları derlemek ve bağlamak anlamına gelirken, Yeniden Oluştur, değiştirilip değiştirilmediklerinden bağımsız olarak tüm kaynak dosyaları derlemek ve bağlamak anlamına gelir. Yapı normal bir şeydir ve daha hızlıdır. Bazen proje hedefi bileşenlerinin sürümleri senkronizasyondan çıkabilir ve yapının başarılı olması için yeniden oluşturma gerekir. Uygulamada, asla Temizlemenize gerek yoktur.



1
Bağlantı? Dinamik Bağlantı Kütüphanesi olarak da adlandırılan bir DLL fikrinin çalışma zamanında bağlantı kurmak olduğunu düşündüm.
The Dag

7
"Pratikte asla Temizlemenize gerek yok" <- Ben bu konuda BS çağırıyorum.
16:16

2
piers7 daha sonra yeniden vs temizlemek için gereken bir neden sağlayabilir?
PaulBinder


46

Derleme Çözümü - Dosyaları değiştirmiş olan derlemeleri oluşturur. Bir derlemede değişiklik yoksa yeniden oluşturulmaz. Ayrıca hiçbir ara dosya silinmez.

En yaygın olarak kullanılır.

Yeniden Oluşturma Çözümü - Değişikliklerden bağımsız olarak tüm montajları yeniden oluşturur , ancak ara dosyaları bırakır.

Visual Studio'nun değişikliklerinizi en son derlemeye dahil etmediğini fark ettiğinizde kullanılır. Bazen Visual Studio hata yapar.

Temiz Çözüm - Tüm ara dosyaları silin.

Her şey başarısız olduğunda ve her şeyi temizleyip yeni başlamanız gerektiğinde kullanılır.


25
Temiz bir yapı yapmaz.
Jon Skeet

3
@Jon Skeet - Her gün yeni bir şeyler öğrenin. Yeniden inşa ettiğine yemin ederdim. Hafızam her zaman istediğim kadar güvenilir değil sanırım.
Justin Niessner

16

Ben sadece Rebuild önce Temiz tarafından takip Build inşa düşünüyorum. Belki yanılıyorum ... yorum?


Bunun hiçbir oyu yoktu (şimdiye kadar) ve belgelere göre (Jon'un cevabındaki bağlantıya bakın) bu tam olarak doğru.
Tod

2
Öyle olduğunu sanmıyorum. Temiz bir çözüm yapmanın ardından Build Solution'ın çalıştığı bir durum var, ancak Yeniden Oluşturma Çözümü başarısız oluyor. Bu, 2 proje (biri diğerine bağımlı) ile yeni oluşturulmuş bir çözümdür.
Cthutu

@Cthutu Burada fark yaratan ayrıntı için Shivprasad'ın cevabına bakınız. Yeniden oluştur, her bir projeyi birer birer temizler ve derlerken, Clean'i çalıştırmak önce her şeyi bir kerede temizler, ardından Build hepsini aynı anda oluşturur. Temiz / derleme düzenindeki bu değişikliğin derleme ile derleme arasındaki farkı da oluşturduğu örneklerle karşılaştım.
Sean

@Sean Belki bunun file referenceyerine çözümünüze bir proje eklemekten kaynaklanmıştı , bu project referenceyüzden proje inşa emri bir diğerinden önce belirli bir proje inşa etmek zorunda olduğunu fark etmedi ve montaj sırasında olması gereken yerde mevcut değildi inşa etmek?
Zack

14

Derleme Çözümü - Dosyaları değiştirmiş olan derlemeleri oluşturur. Bir derlemede değişiklik yoksa yeniden oluşturulmaz. Ayrıca hiçbir ara dosya silinmez.

Çözümü yeniden oluştur ve daha önce yaptığı her şeyi görmezden gelerek çözümü sıfırdan oluşturacak

Temiz Çözüm , derlenmiş tüm dosyaları (örneğin EXE ve DLL dosyaları) bin / obj dizininden siler.


8

Derleme çözümü değişen çözümde herhangi bir proje inşa edecektir. Rebuild ne olursa olsun tüm projeleri oluşturur, temiz çözüm tüm geçici dosyaları siler ve bir sonraki derlemenin tamamlanmasını sağlar.


6

Derleme Çözümü - Derleme çözümü, uygulamanızı herhangi bir dosya değişikliği olan projelerin sayısını oluşturarak inşa edecektir. Ve mevcut ikili dosyaları temizlemez ve sadece bin veya obj klasöründeki güncellenmiş derlemeleri değiştirmez.

Yeniden Oluşturma Çözümü - Yeniden oluştur çözümü, uygulamanızdaki tüm projelerin temizlenmesiyle oluşturularak tüm uygulamanızı oluşturacaktır. Oluşturmadan önce bin ve obj klasöründeki tüm ikili dosyaları siler.

Temiz Çözüm - Temiz çözüm sadece bin ve obj klasöründeki tüm ikili dosyaları siler.


5

Yapı çözümü

Bu artımlı bir yapı gerçekleştirecektir. Başka bir deyişle, yalnızca değişen kod dosyaları oluşturacaktır. Eğer değiştirmediyse bu dosyalara dokunulmaz.

Çözümü yeniden oluştur

Bu, derlenmiş olan tüm dosyaları (örn. Exe ve DLL) siler ve dosyada kod değişikliği olup olmamasına bakılmaksızın her şeyi sıfırdan oluşturur.

Temiz çözüm menüsü

Bu menü, derlenmiş tüm dosyaları (örneğin EXE ve DLL dosyaları) bin / obj dizininden siler.

Yeniden oluştur = Temizle + Oluştur


4

İnsanların dışarıda bıraktığını düşündüğüm en önemli şey, Build and Clean'in her ikisi de Visual Studio'nun Proje / Çözümünüz hakkındaki bilgisine dayanarak gerçekleştirilen görevlerdir. Clean'in işe yaramadığından veya artık dosyalar bırakmadığından veya güvenilir olmadığından çok fazla şikayet görüyorum, aslında, güvenilir olmadığını söylediğiniz nedenler aslında daha güvenilir hale getiriyor.

Clean, yalnızca Visual Studio veya derleyicinin kendisinin oluşturduğu dosyaları ve / veya dizinleri kaldırır (temizler). Kendi dosyalarınızı veya oluşturduğunuz dosyaları / klasör yapılarını dış bir araç veya kaynaktan kopyalarsanız, Visual Studio "var olduklarını bilmez" ve bu nedenle bunlara dokunmamalıdır.

Temizleme işleminin temelde bir "del *. *" Gerçekleştirip gerçekleştirmediğini hayal edebiliyor musunuz? Bu felaket olabilir.

Build değiştirilmiş veya gerekli projelerde derleme gerçekleştirir.

Yeniden oluşturma , değişiklikten veya gerekli olandan bağımsız olarak bir derleme gerçekleştirir.

Temizle , geçmişte oluşturduğu dosyaları / klasörleri kaldırır, ancak başlangıçta hiçbir ilgisi olmayan her şeyi bırakır.

Umarım bu biraz ayrıntılı ve yardımcı olur.


4

Ben aa boş çözümümüz var BuildRebuildCleanve üç sınıf kütüphanesi Models, Repository, Notification.

Kullandığım Modelsve Repositoryiçinde Notificationsınıf kitaplığında.

Sonra:

  • Derleme çözümü Artımlı derleme ve yalnızca değiştirilen dosyaları derler. Bir derlemede değişiklik yoksa yeniden oluşturulmaz. Ayrıca, hiçbir ara dosyayı silmez. ModelsKütüphane projesinde bazı kodları değiştirirseniz , çözümü İNŞA ET. Aşağıdaki ekran görüntüsünde DLL'nin zaman damgasına bakın, EXE Modelsve Notificationkütüphanesinde güncellenir .

resim açıklamasını buraya girin

  • Yeniden oluştur çözümü Derlenmiş tüm dosyaları siler ve değişikliklere bakılmaksızın tüm dosyaları derler, daha önce yaptığı her şeyi yok sayar. Çözüm adını sağ tıklayın BuildRebuildClean. Yaptığı tüm derlemeleri, EXE'leri ve başvurulan dosyaları yeniden derlemek için siler.

resim açıklamasını buraya girin

  • Temiz Çözüm Bin / obj dizininden derlenmiş tüm ara dosyaları (örn. EXE ve DLL) siler.

resim açıklamasını buraya girin


2

Tüm bildiğim bir temiz ne "temiz yapmak" yapmak için kullanılan yapmaz - Eğer bir çözüm temiz ben obj ve bin dosyaları / klasörleri silmek gibi bekler gibi inşa kaynak taze bir ödeme oldu. Deneyimlerime göre, sık sık Clean and Build veya Rebuild'in derlendiği bilinen kaynakta garip hatalar ürettiği ve gerekli olan bin / obj klasörlerinin manuel olarak silinmesi olduğu zamanlar buluyorum .


Özellikle Xamarin projelerinde tuhaf derleme hatalarını çözmek için el ile bin ve obj klasörlerini silmem gerekiyor
Miguel Febres


0

Bu yalnızca "Çözüm Oluştur" seçeneğiyle ilgilidir.

Visual Studio'nun çözümleri gerçekten temizleyememesinden tamamen bıktım ve sizin için yapacak bu küçük aracı yazdım .

İlk önce VS'de çözümünüzü kapatın ve klasörünü Windows Gezgini'nden bu uygulamaya veya simgesine sürükleyin. Penceresinin altındaki ayara bağlı olarak, çözümünüzü GitHub'a manuel olarak yüklemeye veya başka biriyle paylaşmaya çalıştığınızda yardımcı olacak ek şeyleri de kaldırabilir:

resim açıklamasını buraya girin

Özetle, VS tarafından yeniden oluşturulabilen tüm "Hata Ayıklama" klasörlerini, Intellisense ve diğer önbellekleri sizin için Geri Dönüşüm Kutusu'na yerleştirir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.