ओब्जेक्ट और बिन फोल्डर (विजुअल स्टूडियो द्वारा निर्मित) किसके लिए उपयोग किए जाते हैं?


222

मैंने विज़ुअल स्टूडियो 2010 में एक नई परियोजना बनाई और ध्यान दिया कि अब दो नए फ़ोल्डर हैं जिनका नाम objऔर binमेरी परियोजना निर्देशिका है।

भवन और डीबगिंग के दौरान समान जोड़ीदार फ़ोल्डर बनाए जाते हैं - ये फ़ोल्डर किस लिए हैं?

जवाबों:


238

objफ़ोल्डर रखती वस्तु, या मध्यवर्ती, फ़ाइलें , जो बाइनरी फ़ाइलें कि अभी तक लिंक नहीं किए गए संकलित कर रहे हैं। वे अनिवार्य रूप से टुकड़े हैं जिन्हें अंतिम निष्पादन योग्य बनाने के लिए संयोजित किया जाएगा। कंपाइलर प्रत्येक स्रोत फ़ाइल के लिए एक ऑब्जेक्ट फ़ाइल बनाता है, और उन फ़ाइलों को objफ़ोल्डर में रखा जाता है ।

binफ़ोल्डर रखती बाइनरी फ़ाइलें , जो आपके आवेदन या लाइब्रेरी के लिए वास्तविक निष्पादन योग्य कोड हैं।

इनमें से प्रत्येक फ़ोल्डर को आगे Debugऔर Releaseफ़ोल्डरों में विभाजित किया गया है , जो कि परियोजना के निर्माण विन्यास के अनुरूप है। ऊपर चर्चा की गई दो प्रकार की फाइलों को उपयुक्त फ़ोल्डर में रखा जाता है, जिसके आधार पर आप किस प्रकार का निर्माण करते हैं। इससे आपके लिए यह निर्धारित करना आसान हो जाता है कि डिबगिंग प्रतीकों के साथ कौन से एक्ज़ीक्यूटेबल्स बनाए गए हैं, और जो अनुकूलन के साथ बनाए गए हैं और रिलीज़ के लिए तैयार हैं।

ध्यान दें कि आप बदल सकते हैं जहाँ Visual Studio आपकी निष्पादन योग्य फ़ाइलों को आपके प्रोजेक्ट के गुणों में एक संकलन के दौरान आउटपुट करता है। आप अपने बिल्ड कॉन्फ़िगरेशन के लिए नाम और चयनित विकल्प भी बदल सकते हैं।


4
जो भी कारण के लिए, मेरी परियोजना में डिबग और ओबज और बिन फ़ोल्डर के लिए उप-फ़ोल्डर नहीं है। यदि मैं वर्तमान में चयनित कॉन्फ़िगरेशन के आधार पर डीबग / रिलीज़ उप-फ़ोल्डर बनाने के लिए अपनी प्रोजेक्ट सेटिंग्स संपादित करता हूं, तो मुझे एक त्रुटि मिलती है कि जब मैं अपना एप्लिकेशन डीबग करता हूं तो डेटा प्रकार नहीं बनाया जा सकता। मेरा ऐप केवल dlls के लिए बिन फ़ोल्डर में कभी दिखता है और कभी डिबग या रिलीज़ फ़ोल्डर में देखना नहीं जानता है। मैं इसे कैसे ठीक करूं?
अनिल नाथ

3
@ मुझे समझ में नहीं आता कि आप क्या पूछ रहे हैं। एक प्रोजेक्ट या तो एक एप्लिकेशन (EXE) या एक लाइब्रेरी (DLL) बनाता है। यह दोनों का निर्माण नहीं कर सकता। इसलिए यदि आपका प्रोजेक्ट कोई एप्लिकेशन बनाता है, तो यह आपके बिन फ़ोल्डर में कोई DLL नहीं रखेगा। और यदि आपकी परियोजना एक पुस्तकालय का निर्माण करती है, तो जब आप डीएलएल निष्पादित नहीं कर सकते, तो आपको इसे डीबग करने का प्रयास करते समय एक त्रुटि मिलेगी। वैसे भी, ऐसा लगता है कि आपने अपनी परियोजना के गुणों में डिफ़ॉल्ट आउटपुट पथ को बदल दिया है। यदि आपको अधिक सहायता की आवश्यकता है, तो एक नया प्रश्न पूछें। यदि आवश्यक हो तो अपने प्रोजेक्ट कॉन्फ़िगरेशन के स्क्रीनशॉट सहित, समस्या का अच्छी तरह से दस्तावेज़ करना सुनिश्चित करें।
कोड़ी ग्रे

2
मुझे आश्चर्य है कि अगर मैं बिल्ड होने के बाद दृश्य स्टूडियो को हटाने के लिए मजबूर कर सकता हूं?
जॉनी_ डी।

2
@SlyRaskal एक कारण है कि आपके पास डिबग / रिलीज़ फ़ोल्डर नहीं हो सकता है यदि आप एक वेब प्रोजेक्ट विकसित कर रहे हैं?
टिम इल्स

2
क्या objवास्तव में केवल गैर-लिंक की गई ऑब्जेक्ट कोड फ़ाइलें हैं? मेरे अनुभव से, यह उन सभी को सम्‍मिलित करता है, और अंतिम बिल्ड स्‍टेप पर, "फाइनल सेट" का हिस्‍सा बनने वाली फाइलों को कॉपी किया जाता है bin
ivan_pozdeev

44

मैं आपको इस youtube वीडियो को देखने के लिए प्रोत्साहित करूंगा जो C # bin और obj फ़ोल्डरों के बीच के अंतर को प्रदर्शित करता है और यह भी बताता है कि हमें वृद्धिशील / सशर्त संकलन का लाभ कैसे मिलता है।

C # संकलन एक दो-चरणीय प्रक्रिया है, अधिक विवरण के लिए नीचे दिए गए चित्र देखें:

  1. संकलन: संकलन चरण में व्यक्तिगत C # कोड फाइलें व्यक्तिगत संकलित इकाइयों में संकलित की जाती हैं। ये व्यक्तिगत संकलित कोड फाइलें OBJ निर्देशिका में जाती हैं।
  2. लिंकिंग: लिंकिंग चरण में इन व्यक्तिगत संकलित कोड फ़ाइलों को सिंगल यूनिट DLL और EXE बनाने के लिए लिंक किया जाता है। यह बिन निर्देशिका में जाता है।

सी # बिन बनाम ओबीजी फ़ोल्डर्स

यदि आप दोनों बिन और obj निर्देशिका की तुलना करते हैं, तो आपको "obj" निर्देशिका में बड़ी संख्या में फाइलें मिलेंगी क्योंकि इसमें व्यक्तिगत संकलित कोड फाइलें हैं जबकि "bin" में एक एकल इकाई है।

बिन बनाम ओब्ज


20

objनिर्देशिका मध्यवर्ती वस्तु फ़ाइलें और अन्य क्षणिक डेटा फ़ाइलों कि निर्माण के दौरान संकलक या निर्माण प्रणाली द्वारा उत्पन्न कर रहे हैं के लिए है। binनिर्देशिका है कि अंतिम उत्पादन बाइनरी (और किसी भी निर्भरता या अन्य परिनियोजन योग्य फ़ाइलें) के लिए लिखा जाएगा निर्देशिका है।

आप परियोजना सेटिंग्स के भीतर दोनों उद्देश्यों के लिए उपयोग की जाने वाली वास्तविक निर्देशिकाओं को बदल सकते हैं, यदि आप चाहें।


"बिन" को परियोजना के गुणों में बदला जा सकता है -> "बिल्ड" -> "आउटपुट" -> "आउटपुट पथ"। लेकिन "obj" के बारे में क्या?
पीटर मोर्टेंसन

5

Obj निर्देशिका के बारे में एक दिलचस्प तथ्य: यदि आपके पास किसी वेब प्रोजेक्ट में प्रकाशित किया गया है, तो प्रकाशित की जाने वाली फाइलें obj \ Release \ Package \ PackageTmp का मंचन किया जाएगा। यदि आप एकीकृत VS सुविधा का उपयोग करने के बजाय फ़ाइलों को स्वयं प्रकाशित करना चाहते हैं, तो आप उन फ़ाइलों को हड़प सकते हैं, जिन्हें आपको वास्तव में यहां पर तैनात करने की आवश्यकता है, बिन निर्देशिका में सभी डिजिटल मलबे के माध्यम से लेने के बजाय।


0

setupयदि आप उनका उपयोग कर रहे हैं तो परियोजनाओं से सावधान रहें ; Visual Studio सेटअप प्रोजेक्ट फ़ोल्डर के बजाय फ़ोल्डर Primary Outputसे खींचता है ।objbin

मैं अनुप्रयोगों मैंने सोचा था कि समझ से परे है और प्रवेश करने के बाद जारी किया गया था msiकाफी देर के लिए सेट अप करने से पहले मुझे पता चला कि तैनात आवेदन फ़ाइलें वास्तव में न तो पर बाद निर्माण प्रक्रिया प्रदर्शन के रूप में अस्पष्ट थे और न ही के रूप में हस्ताक्षर किए मैं binफ़ोल्डर विधानसभाओं और लक्षित कर किया जाना चाहिए था objफ़ोल्डर इसके बजाय विधानसभाएं।

यह सहज imho से दूर है, लेकिन सामान्य setupदृष्टिकोण Primary Outputपरियोजना का उपयोग करना है और यह objफ़ोल्डर है। मुझे अच्छा लगेगा अगर कोई इस btw पर कुछ प्रकाश डाल सकता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.