Perbedaan antara Build Solution, Rebuild Solution, dan Clean Solution di Visual Studio?

Jawaban:

921
  • Solusi build akan melakukan build tambahan: jika tidak merasa perlu untuk membangun kembali proyek, itu tidak akan terjadi. Ini juga dapat menggunakan bit proyek yang dibangun sebagian jika belum berubah (saya tidak tahu seberapa jauh hal ini berlangsung)
  • Solusi membangun kembali akan membersihkan dan kemudian membangun solusi dari awal, mengabaikan apa pun yang telah dilakukan sebelumnya. Perbedaan antara ini dan "Bersih, diikuti oleh Build" adalah bahwa Rebuild akan membersihkan-lalu-membangun setiap proyek, satu per satu, daripada membersihkan semua lalu membangun semua.
  • Solusi bersih akan menghapus artefak build dari build sebelumnya. Jika ada file lain di direktori target build (bin dan obj), mereka mungkin tidak dihapus, tetapi artefak build sebenarnya. Saya telah melihat perilaku untuk ini bervariasi - kadang-kadang menghapus cukup menyeluruh dan kadang-kadang tidak - tapi saya akan memberikan VS manfaat keraguan untuk saat ini :)

(Tautan ke switch perintah devenv.exe , tetapi melakukan hal yang sama dengan item menu.)

Jon Skeet
sumber
2
@ komp: Tidak dalam proyek yang baru saja saya lihat. Masih ada semua majelis di sana ...
Jon Skeet
1
@ Jon - aneh. Saya tidak ingat pembersihan tidak membersihkan direktori tersebut. Saya melakukannya sekarang dan menghapus semua file .dll dan .pdb. Pasti meninggalkan sampah ReSharper saya sendiri.
Beranjak
156
Saya pribadi telah menemukan "Solusi Bersih" lebih dari tidak membantu. Jika saya benar - benar ingin membersihkannya, menghapus secara manual folder bin dan obj adalah cara yang harus dilakukan. Bahkan telah tertangkap mengejar hantu "kesalahan" - sampai saya melakukan itu. Bersih saja tidak bisa diandalkan.
Chris Rogers
7
jika artefak membuat jalan mereka melalui cara lain selain melalui membangun artefak (katakanlah misalnya salinan dari sumber lain yang diintegrasikan sebagai msbuidltask di cproj) maka bersihkanlah. Yang membuatnya sangat tidak berguna, saya bahkan mengatakan itu berbahaya karena akan meninggalkan Anda dengan rasa bersih yang salah.
Newtopian
4
@verdana: Untuk github dll, lebih mudah memiliki .gitignorefile yang layak . Tetapi sesuai jawabannya, Bersih tidak selalu melakukan pekerjaan yang sangat menyeluruh dalam pengalaman saya.
Jon Skeet
455

Membangun solusi: Mengkompilasi file kode (DLL dan EXE) yang diubah.

Rebuild: Menghapus semua file yang dikompilasi dan mengkompilasinya lagi terlepas dari apakah kode telah berubah atau tidak.

Solusi bersih: Menghapus semua file yang dikompilasi (file DLL dan EXE).

Anda dapat melihat video YouTube ini ( Visual Studio Build vs. Rebuild vs Clean (pertanyaan wawancara # jawaban C) ) di mana saya telah menunjukkan perbedaan dan di bawah ini adalah representasi visual yang akan membantu Anda menganalisis hal yang lebih detail.

Build vs Rebuild

Perbedaan antara Rebuild vs. (Clean + Build), karena sepertinya ada beberapa kebingungan di sini:

Perbedaannya adalah cara urutan build dan clean terjadi untuk setiap proyek. Katakanlah solusi Anda memiliki dua proyek, "proj1" dan "proj2". Jika Anda melakukan pembangunan kembali, ia akan mengambil "proj1", bersihkan (hapus) file yang dikompilasi untuk "proj1" dan bangunlah. Setelah itu akan mengambil proyek kedua "proj2", membersihkan file yang dikompilasi untuk "proj2" dan kompilasi "proj2".

Tetapi jika Anda melakukan "clean" and build ", itu pertama-tama akan menghapus semua file yang dikompilasi untuk" proj1 "dan" proj2 "dan kemudian akan membangun" proj1 "pertama diikuti oleh" proj2 ".

Rebuild Vs Clean

Shivprasad Koirala
sumber
26
Terima kasih telah menjelaskan mengapa Rebuild tidak selalu berfungsi dan saya sering perlu membersihkan sebelum melakukan build.
Didier A.
4
Ya, deskripsi dan diagram kedua sangat membantu dan jelas. Jika Anda dapat memperbaiki diagram alur "ilegal", sehingga Ya hanya pergi ke satu tempat, itu akan membantu. Saya benar-benar tidak mengerti apa yang ingin dikatakan, terutama dengan "Bangun SEMUA" di bawah "Rebuild".
Jon Coombs
@ JonCoombs Ya, saya tidak berpikir flowchart pertama menangkap apa yang dia katakan di video. Saya pikir gambar yang saya masukkan adalah tujuan Shivprasad.
ruffin
Seperti yang saya pahami, jika ada file yang berubah, proyek dibersihkan berdasarkan build biasa, artinya tidak melakukan apa-apa atau membersihkan dan membangun proyek. Apakah ini benar?
jelas
147

Diambil dari tautan ini :

Build berarti mengkompilasi dan menautkan hanya file sumber yang telah berubah sejak build terakhir, sedangkan Rebuild berarti mengkompilasi dan menautkan semua file sumber terlepas dari apakah mereka berubah atau tidak. Membangun adalah hal yang normal untuk dilakukan dan lebih cepat. Terkadang versi komponen target proyek dapat keluar dari sinkronisasi dan membangun kembali diperlukan untuk membuat pembangunan berhasil. Dalam praktiknya, Anda tidak perlu Bersihkan.

Matthew Jones
sumber
1
Tautan? Saya pikir ide DLL, alias Dynamic Link Library, adalah tautan saat runtime?
The Dag
7
"Dalam prakteknya Anda tidak perlu Bersihkan" <- Saya memanggil BS yang satu ini.
piers7
2
piers7 dapatkah Anda memberikan alasan Anda perlu membersihkan vs membangun kembali?
PaulBinder
46

Build Solution - Membangun rakitan apa pun yang telah mengubah file. Jika suatu perakitan tidak memiliki perubahan, itu tidak akan dibangun kembali. Juga tidak akan menghapus file perantara.

Digunakan paling umum.

Solusi Rebuild - Membangun kembali semua majelis terlepas dari perubahan tetapi meninggalkan file perantara.

Digunakan ketika Anda melihat bahwa Visual Studio tidak memasukkan perubahan Anda dalam perakitan terbaru. Kadang-kadang Visual Studio membuat kesalahan.

Solusi Bersih - Hapus semua file perantara.

Digunakan ketika semuanya gagal dan Anda perlu membersihkan semuanya dan mulai segar.

Justin Niessner
sumber
25
Bersih tidak membangun.
Jon Skeet
3
@ Jon Skeet - Pelajari sesuatu yang baru setiap hari. Aku bersumpah itu akan membangun kembali. Saya kira ingatan saya tidak selalu dapat diandalkan seperti yang saya inginkan.
Justin Niessner
16

Saya hanya berpikir tentang Rebuild sebagai melakukan Clean pertama diikuti oleh Build. Mungkin saya salah ... komentar?

Ken Richards
sumber
Ini tidak memiliki upvotes (sampai sekarang) dan menurut dokumen (lihat tautan dalam jawaban Jon) ini benar.
Tod
2
Saya kira tidak. Saya memiliki situasi di mana melakukan Solusi Bersih, diikuti oleh Build Solution berfungsi, tetapi melakukan Solusi Rebuild gagal. Ini adalah solusi yang baru dibuat dengan 2 proyek (satu tergantung yang lain).
Cthutu
@Cthutu Lihat jawaban Shivprasad untuk perincian yang membuat perbedaan di sini. Rebuild membersihkan dan kemudian membangun setiap proyek secara bersamaan, sedangkan menjalankan Clean terlebih dahulu membersihkan semuanya sekaligus, kemudian Build membangunnya sekaligus. Saya telah menemukan contoh di mana perubahan dalam urutan clean / build ini membuat perbedaan antara kompilasi dan tidak kompilasi juga.
Sean
@Sean Mungkin itu disebabkan oleh menambahkan proyek dalam solusi Anda sebagai file referencepengganti, project referencesehingga pesanan pembangunan proyek tidak mengenalinya untuk membangun proyek tertentu sebelum yang lain, dan perakitan tidak ada di tempat yang seharusnya ada selama membangun?
Zack
14

Build Solution - Membangun rakitan apa pun yang telah mengubah file. Jika suatu perakitan tidak memiliki perubahan, itu tidak akan dibangun kembali. Juga tidak akan menghapus file perantara.

Solusi membangun kembali akan membersihkan dan kemudian membangun solusi dari awal, mengabaikan apa pun yang telah dilakukan sebelumnya

Clean Solution akan menghapus semua file yang dikompilasi (yaitu, EXE dan DLL) dari direktori bin / obj.

Guilherme Fidelis
sumber
8

Membangun solusi akan membangun proyek apa pun dalam solusi yang telah berubah. Rebuild membangun semua proyek tidak peduli apa pun, solusi bersih menghapus semua file sementara memastikan bahwa pembangunan selanjutnya selesai.

Steven Evers
sumber
6

Build Solution - Build solution akan membangun aplikasi Anda dengan membangun sejumlah proyek yang mengalami perubahan file. Dan itu tidak menghapus file biner yang ada dan hanya mengganti rakitan yang diperbarui di folder bin atau obj.

Membangun Kembali Solusi - Rebuild akan membangun seluruh aplikasi Anda dengan membangun semua proyek yang tersedia dalam solusi Anda dengan membersihkannya. Sebelum membangunnya menghapus semua file biner dari folder bin dan obj.

Solusi Bersih - Solusi bersih hanya membersihkan semua file biner dari folder bin dan obj.

Sabaridass R
sumber
5

Bangun solusi

Ini akan melakukan pembangunan bertahap. Dengan kata lain itu hanya akan membuat file kode yang telah berubah. Jika mereka belum mengubah file-file itu tidak akan disentuh.

Membangun kembali solusi

Ini akan menghapus semua file yang dikompilasi saat ini (yaitu, exe dan DLL) dan akan membangun semuanya dari awal, terlepas dari apakah ada perubahan kode dalam file atau tidak.

Menu solusi bersih

Menu ini akan menghapus semua file yang dikompilasi (yaitu, EXE dan DLL) dari direktori bin / obj.

Rebuild = Bersihkan + Bangun

Sajisha
sumber
4

Satu hal utama yang saya pikir orang-orang tinggalkan adalah Build and Clean adalah kedua tugas yang dilakukan berdasarkan pengetahuan Visual Studio tentang Proyek / Solusi Anda. Saya melihat banyak mengeluh bahwa Bersih tidak berfungsi atau meninggalkan file sisa atau tidak dapat dipercaya, padahal sebenarnya, alasan Anda mengatakan itu tidak dapat dipercaya sebenarnya membuatnya lebih dapat dipercaya.

Bersihkan hanya akan menghapus (membersihkan) file dan / atau direktori yang dibuat oleh Visual Studio atau kompiler sendiri. Jika Anda menyalin file Anda sendiri atau struktur file / folder dibuat dari alat atau sumber luar, maka Visual Studio tidak "tahu mereka ada" dan karena itu, jangan menyentuh mereka.

Bisakah Anda bayangkan jika operasi Clean pada dasarnya melakukan "del *. *"? Ini bisa menjadi bencana besar.

Build melakukan kompilasi pada proyek yang diubah atau perlu.

Rebuild melakukan kompilasi terlepas dari perubahan atau apa yang diperlukan.

Bersihkan menghapus file / folder yang telah dibuat di masa lalu, tetapi meninggalkan apa pun yang tidak ada hubungannya, pada awalnya.

Saya harap ini menguraikan sedikit dan membantu.

Mengejar
sumber
4

Saya punya aa solusi kosong BuildRebuildCleandan tiga perpustakaan kelas Models, Repository, Notification.

Saya menggunakan Modelsdan Repositorydi Notificationperpustakaan kelas.

Kemudian:

  • Membangun solusi Membangun tambahan dan mengkompilasi hanya file yang diubah. Jika suatu perakitan tidak memiliki perubahan, itu tidak akan dibangun kembali. Selain itu, tidak akan menghapus file perantara. Jika Ubah beberapa kode dalam Modelsproyek perpustakaan, maka BUILD solusi. Di cuplikan layar di bawah ini, merujuk pada cap waktu DLL, EXE diperbarui di Modelsdan Notificationpustaka.

masukkan deskripsi gambar di sini

  • Solusi membangun kembali Menghapus semua file yang dikompilasi dan mengkompilasi semua terlepas dari perubahan, mengabaikan apa pun yang dilakukan sebelumnya. Klik kanan pada nama solusi BuildRebuildClean. Apa yang dilakukannya adalah menghapus semua rakitan, EXE, dan file yang dirujuk untuk dikompilasi lagi.

masukkan deskripsi gambar di sini

  • Clean Solution Menghapus semua file perantara yang dikompilasi (mis. EXE dan DLL) dari direktori bin / obj.

masukkan deskripsi gambar di sini

Reza Jenabi
sumber
2

Yang saya tahu adalah Clean tidak melakukan apa yang "bersihkan" dulu - jika saya Bersihkan solusi saya harapkan itu menghapus obj dan bin file / folder yang dibangunnya seperti itu adalah checkout baru dari sumbernya. Dalam pengalaman saya meskipun saya sering menemukan waktu di mana Clean and Build atau Rebuild masih menghasilkan kesalahan aneh pada sumber yang dikenal untuk dikompilasi dan apa yang diperlukan adalah penghapusan manual dari folder bin / obj, maka itu akan dibangun.

steve
sumber
Khususnya dalam proyek Xamarin saya perlu menghapus secara manual folder bin dan obj untuk menyelesaikan kesalahan kompilasi yang aneh
Miguel Febres
0

Ini hanya menyangkut opsi "Bangun Solusi".

Saya benar-benar muak dengan ketidakmampuan Visual Studio untuk solusi benar-benar bersih dan menulis alat kecil ini yang akan melakukannya untuk Anda.

Tutup solusi Anda di VS terlebih dahulu dan seret foldernya dari Windows Explorer ke aplikasi ini atau ke ikonnya. Bergantung pada pengaturan di bagian bawah jendelanya, itu juga dapat menghapus hal-hal tambahan, yang akan membantu jika Anda mencoba mengunggah solusi Anda secara manual ke GitHub atau membaginya dengan orang lain:

masukkan deskripsi gambar di sini

Singkatnya, ini akan menempatkan semua folder "Debug", Intellisense, dan cache lainnya yang dapat dibangun kembali oleh VS ke Recycle Bin untuk Anda.

ahmd0
sumber