(Visual Studio tarafından oluşturulan) obj ve bin klasörleri ne için kullanılır?


222

Ben Visual Studio 2010 yeni bir proje oluşturulur ve adında iki yeni klasörler artık olduğunu fark objve binbenim proje dizininde.

Benzer bir çift klasör oluştururken ve hata ayıklanırken oluşturulur - bu klasörler ne için?

Yanıtlar:


238

objKlasör tutan nesne, ya da ara dosyaları henüz bağlanmamış edilmemiş ikili dosyaları derlenmektedir. Aslında, son yürütülebilir dosyayı üretmek için birleştirilecek parçalar. Derleyici, her kaynak dosya için bir nesne dosyası oluşturur ve bu dosyalar objklasöre yerleştirilir .

binKlasör tutan ikili dosyaları uygulamanızda veya kitaplık için gerçek çalıştırılabilir kod vardır.

Bu klasörlerin her biri ayrıca projenin derleme yapılandırmalarına karşılık gelen klasörlere Debugve Releaseklasörlere ayrılmıştır . Yukarıda tartışılan iki dosya türü, gerçekleştirdiğiniz yapı türüne bağlı olarak uygun klasöre yerleştirilir. Bu, hangi yürütülebilir dosyaların hata ayıklama sembolleri ile oluşturulduğunu ve hangilerinin etkin ve kullanıma hazır optimizasyonlarla oluşturulduğunu belirlemenizi kolaylaştırır.

Projenizin Özellikler derleme sırasında Visual Studio çalıştırılabilir dosyalarınızı çıktısını değiştirebileceğiniz unutmayın. Derleme yapılandırmalarınız için adları ve seçilen seçenekleri de değiştirebilirsiniz.


4
Hangi nedenle olursa olsun, projemin obj ve bin klasörleri için bir hata ayıklama veya yayın alt klasörü yok. Seçili yapılandırmaya bağlı olarak hata ayıklama / bırakma alt klasörüne oluşturmak için proje ayarlarımı düzenlersem, uygulamamda hata ayıkladığımda veri türünün oluşturulamadığı bir hata alıyorum. Benim app sadece hiç dll için bin klasöründe görünüyor ve asla hata ayıklama veya sürüm klasöründe bakmak bilmiyor. Bunu nasıl düzeltirim?
Anil Natha

3
@Sadece ne istediğini anlamıyorum. Bir proje bir uygulama (EXE) veya bir kitaplık (DLL) oluşturur. İkisini de inşa edemez. Projeniz bir uygulama oluşturursa, bin klasörünüze herhangi bir DLL yerleştirmez. Projeniz bir kitaplık oluşturuyorsa, bir DLL yürütemediğiniz için hata ayıklamaya çalıştığınızda bir hata alırsınız. Her neyse, projenizin özelliklerindeki varsayılan çıktı yolunu değiştirmişsiniz gibi görünüyor. Daha fazla yardıma ihtiyacınız olursa yeni bir soru sorun. Gerekirse proje yapılandırmanızın ekran görüntüleri de dahil olmak üzere sorunu iyi belgelediğinizden emin olun.
Cody Gray

2
Derleme tamamlandıktan sonra visual studio silmek obj klasörünü zorlayabilir miyim acaba?
Johnny_D

2
@SlyRaskal Debug / Release klasörlerine sahip olmamanızın bir nedeni, bir web projesi geliştiriyorsanız?
Tim Iles

2
Does objgerçekten sadece ihtiva bağlantısız nesne kod dosyaları? Benim tecrübelerime göre, içerdiği tüm bunların ve son inşa aşamasında, "nihai seti" nin parçası olan dosyalar vardır kopyalanan içine bin.
ivan_pozdeev

44

C # bin ve obj klasörleri arasındaki farkı gösteren ve ayrıca artımlı / koşullu derlemeden nasıl faydalandığımızı açıklayan bu youtube videosunu görmenizi öneririm .

C # derlemesi iki adımlı bir işlemdir, daha fazla ayrıntı için aşağıdaki şemaya bakın:

  1. Derleme: Derleme aşamasında ayrı ayrı C # kod dosyaları derlenmiş ayrı birimler halinde derlenir. Bu bireysel derlenmiş kod dosyaları OBJ dizinine gider.
  2. Bağlama: Bağlama aşamasında, bu tek tek derlenmiş kod dosyaları tek birim DLL ve EXE oluşturmak için bağlanır. Bu, BIN dizinine gider.

C # bin vs obj klasörleri

Hem bin hem de obj dizinini karşılaştırırsanız, "obj" dizininde daha fazla sayıda dosya bulacaksınız, çünkü "bin" tek bir üniteye sahipken ayrı ayrı derlenmiş kod dosyalarına sahiptir.

bin vs obj


20

objDizin oluşturma sırasında derleyici veya yapı sistemi tarafından oluşturulan ara nesne dosyaları ve diğer geçici veri dosyaları içindir. binDizin son çıkış ikili (ve herhangi bir bağımlılık ya da diğer konuşlandırılabilir dosyaları) yazılır olacağı dizindir.

İsterseniz, her iki amaç için kullanılan gerçek dizinleri proje ayarlarından değiştirebilirsiniz.


"bin" proje özelliklerinde değiştirilebilir -> "Derleme" -> "Çıktı" -> "Çıktı yolu". Peki ya "obj"?
Peter Mortensen

5

Obj dizini hakkında ilginç bir gerçek: Bir web projesinde yayınlanmış bir yayınınız varsa, yayınlanacak dosyalar obj \ Release \ Package \ PackageTmp şeklinde hazırlanır. Entegre VS özelliğini kullanmak yerine dosyaları kendiniz yayınlamak istiyorsanız, bin dizinindeki tüm dijital döküntüleri seçmek yerine, burada dağıtmanız gereken dosyaları alabilirsiniz.


0

setupProjeleri kullanıyorsanız dikkatli olun ; Visual Studio kurulum projeleri yerine klasöründen Primary Outputçeker .objbin

Ben Karartılmış ve imzalanan sanıyordum uygulamaları bırakmadan oldu msiben dağıtılan uygulama dosyaları aslında ne Karartılmış ne de olarak imzalanan I üzerinde post-build işlemi gerçekleştirmeden olarak keşfetmiştir önce uzunca bir süre kurulumları binklasör meclisleri ve hedefleme olmalıydı objklasörü yerine.

Bu sezgisel imho olmaktan uzak, ama genel setupyaklaşım Primary Outputprojeyi kullanmak ve bu objklasör. Birisi bu btw'ye biraz ışık tutabilirse çok isterdim.

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.