Untuk apa folder obj dan bin (dibuat oleh Visual Studio) digunakan?

222

Saya membuat proyek baru di Visual Studio 2010 dan memperhatikan bahwa sekarang ada dua folder baru bernama objdan bindi direktori proyek saya.

Sepasang folder serupa dibuat saat membuat dan men-debug - untuk apa folder-folder ini?

yesraaj
sumber

Jawaban:

238

The objfolder memegang objek, atau menengah, file , yang dikompilasi file biner yang belum dikaitkan belum. Mereka pada dasarnya adalah fragmen yang akan digabungkan untuk menghasilkan executable final. Compiler menghasilkan satu file objek untuk setiap file sumber, dan file-file itu ditempatkan ke dalam objfolder.

The binfolder memegang file biner , yang merupakan kode dieksekusi sebenarnya untuk aplikasi Anda atau perpustakaan.

Masing-masing folder ini dibagi lagi menjadi Debugdan Releasefolder, yang hanya sesuai dengan konfigurasi pembangunan proyek. Dua jenis file yang dibahas di atas ditempatkan ke dalam folder yang sesuai, tergantung pada jenis bangunan yang Anda lakukan. Ini memudahkan Anda untuk menentukan executable mana yang dibuat dengan simbol debugging, dan mana yang dibangun dengan optimasi yang diaktifkan dan siap untuk dirilis.

Perhatikan bahwa Anda dapat mengubah di mana Visual Studio mengeluarkan file Anda yang dapat dieksekusi selama kompilasi di Properties proyek Anda. Anda juga dapat mengubah nama dan opsi yang dipilih untuk konfigurasi bangunan Anda.

Cody Grey
sumber
4
Untuk alasan apa pun, proyek saya tidak memiliki debug atau melepaskan sub-folder untuk folder obj dan bin. Jika saya mengedit pengaturan proyek saya untuk membangun ke sub-folder debug / lepaskan tergantung pada konfigurasi yang dipilih saat ini, saya mendapatkan kesalahan bahwa tipe data tidak dapat dibuat ketika saya debug aplikasi saya. Aplikasi saya hanya pernah melihat di folder bin untuk dll dan tidak pernah tahu untuk mencari di folder debug atau rilis. Bagaimana saya memperbaikinya?
Anil Natha
3
@Saya tidak mengerti apa yang Anda minta. Proyek membangun aplikasi (EXE) atau perpustakaan (DLL). Itu tidak bisa membangun keduanya. Jadi jika proyek Anda membuat aplikasi, itu tidak akan menempatkan DLL ke folder bin Anda. Dan jika proyek Anda membangun perpustakaan, Anda akan mendapatkan kesalahan ketika Anda mencoba untuk men-debug itu karena Anda tidak dapat menjalankan DLL. Bagaimanapun, sepertinya Anda telah mengubah jalur output default di properti proyek Anda. Jika Anda memerlukan bantuan lebih lanjut, ajukan pertanyaan baru. Pastikan untuk mendokumentasikan masalah dengan baik, termasuk tangkapan layar dari konfigurasi proyek Anda jika perlu.
Cody Gray
2
Saya ingin tahu apakah saya dapat memaksa folder obj menghapus studio visual setelah build terpenuhi?
Johnny_D
2
@ SlyRaskal Salah satu alasan mengapa Anda mungkin tidak memiliki folder Debug / Rilis adalah jika Anda sedang mengembangkan proyek web?
Tim Iles
2
Apakah objbenar-benar hanya berisi file kode objek yang tidak ditautkan ? Dari pengalaman saya, ini berisi semuanya , dan pada langkah build terakhir, file yang merupakan bagian dari "set terakhir" disalin ke bin.
ivan_pozdeev
44

Saya akan mendorong Anda untuk melihat video youtube ini yang menunjukkan perbedaan antara C # bin dan folder obj dan juga menjelaskan bagaimana kami mendapatkan manfaat dari kompilasi tambahan / kondisional.

Kompilasi C # adalah proses dua langkah, lihat diagram di bawah ini untuk lebih jelasnya:

  1. Kompilasi: Dalam fase kompilasi, masing-masing file kode C # dikompilasi menjadi unit-unit yang dikompilasi. File kode yang dikompilasi secara individu ini masuk dalam direktori OBJ.
  2. Menautkan: Pada tahap penautan, file kode terkompilasi individual ini ditautkan untuk membuat satu unit DLL dan EXE. Ini masuk dalam direktori BIN.

C # bin vs folder obj

Jika Anda membandingkan direktori bin dan obj, Anda akan menemukan jumlah file yang lebih besar di direktori "obj" karena memiliki file kode yang dikompilasi secara individu sementara "bin" memiliki satu unit.

bin vs obj

Shivprasad Koirala
sumber
20

The objdirektori untuk file objek menengah dan file data sementara lainnya yang dihasilkan oleh compiler atau membangun sistem selama membangun. The bindirektori direktori yang binari akhir keluaran (dan dependensi atau file deployable lainnya) akan ditulis.

Anda dapat mengubah direktori aktual yang digunakan untuk kedua tujuan dalam pengaturan proyek, jika Anda mau.

David Ferenczy Rogožan
sumber
"bin" dapat diubah di properti proyek -> "Build" -> "Output" -> "Output path". Tapi bagaimana dengan "keberatan"?
Peter Mortensen
5

Satu fakta menarik tentang direktori obj: Jika Anda memiliki pengaturan penerbitan di proyek web, file yang akan diterbitkan dipentaskan ke obj \ Release \ Package \ PackageTmp. Jika Anda ingin mempublikasikan file sendiri daripada menggunakan fitur VS terintegrasi, Anda dapat mengambil file yang sebenarnya perlu Anda sebarkan di sini, daripada mengambil semua puing-puing digital dalam direktori bin.

Roger Hill
sumber
0

Hati-hati dengan setupproyek jika Anda menggunakannya; Proyek setup Visual Studio Primary Outputmenarik dari objfolder daripada bin.

Saya merilis aplikasi yang saya pikir sudah dikaburkan dan masuk msisetup cukup lama sebelum saya menemukan bahwa file aplikasi yang dikerahkan sebenarnya tidak dikaburkan atau ditandatangani ketika saya melakukan prosedur post-build pada binfolder assemblies dan seharusnya menargetkan objfolder. majelis sebagai gantinya.

Ini jauh dari imho intuitif, tetapi setuppendekatan umum adalah dengan menggunakan Primary Outputproyek dan ini adalah objfolder. Saya akan senang jika seseorang bisa menjelaskan btw ini.

SteveCinq
sumber