वास्तव में C # या .NET में असेंबली क्या है?


102

क्या आप बता सकते हैं कि C # या .NET में एक असेंबली क्या है?

  1. यह कहां से शुरू होता है और कहां खत्म होता है?
  2. मुझे असेंबली के बारे में क्या महत्वपूर्ण जानकारी पता होनी चाहिए?

5
कड़ाई से बोलना, एक सी # अवधारणा के बजाय एक असेंबली .NET अवधारणा नहीं है?
जेएफएच

14
@ जेफ: जब मैंने प्रश्न पूछा तो मुझे लगा कि यह एक सी # अवधारणा है। अब मुझे समझ में आया कि यह एक .NET है। फिर भी, क्योंकि मुझे लगता है कि अन्य लोग भ्रमित हो सकते हैं जैसे मैं था, मैंने जानबूझकर इसे इस गलती के लिए समायोजित करने के लिए Google को नहीं बदला ...
Roee Adler

जवाबों:


114

एक असेंबली आपके कोड का संकलित आउटपुट है, आमतौर पर एक DLL, लेकिन आपका EXE एक असेंबली भी है। यह किसी भी .NET परियोजना के लिए तैनाती की सबसे छोटी इकाई है।

असेंबली में आम तौर पर MSIL (Microsoft मध्यवर्ती भाषा) में .NET कोड होता है जिसे मूल कोड ("JITted" - केवल-इन-टाइम संकलक द्वारा संकलित किया जाएगा) पहली बार किसी दिए गए मशीन पर निष्पादित होता है। उस संकलित कोड को विधानसभा में भी संग्रहीत किया जाएगा और बाद की कॉल पर पुन: उपयोग किया जाएगा।

असेंबली में आइकन, बिटमैप, स्ट्रिंग टेबल आदि जैसे संसाधन भी हो सकते हैं। इसके अलावा, विधानसभा में विधानसभा की घोषणा में मेटाडेटा भी शामिल है - संस्करण संख्या, मजबूत नाम, संस्कृति, संदर्भित विधानसभाओं और इसके बाद की जानकारी।

आपके 99% मामलों में, एक असेंबली डिस्क पर एक भौतिक फ़ाइल के बराबर होती है - एक बहु-फाइल असेंबली (एक असेंबली, एक से अधिक फ़ाइल में वितरित) का मामला एक विषम-बॉल एज केस प्रतीत होता है, जो मैंने किया है .NET विकास के मेरे 5+ वर्षों में अब तक कभी सामना नहीं किया गया।

एक मल्टीफ़ाइल असेंबली में अभी भी DLL या EXE में केवल एक असेंबली मेनिफ़ेस्ट और कई नेटमॉडल फ़ाइलों में MSIL कोड होगा।


1
@marc_s: मुझे लगता है कि आप एक बहु-विधानसभा फ़ाइल का मतलब है। स्टूडियो की कमांड-लाइन टूल्स के माध्यम से एक ही फाइल के भीतर कई विधानसभाओं को पैकेज करना संभव है, लेकिन सीधे आईडीई के माध्यम से नहीं।
ग्रेग डी।

5
एक विधानसभा में एक बहुत ही महत्वपूर्ण बात विधानसभा घोषणा में मेटाडेटा है। मैनिफ़ेस्ट में संस्करण, मजबूत नाम, संस्कृति, संदर्भित असेंबली आदि जैसी जानकारी होती है। एक मल्टीफ़ाइल असेंबली में अभी भी dll या exe में केवल एक असेंबली मेनिफ़ेस्ट और कई .netmodule फ़ाइलों में MSIL कोड होगा। मूल रूप से एक असेंबली में तैनाती की न्यूनतम इकाई है
सॉफ्टवेदा

@marc_s: यदि आप जवाब में @ प्रतीक की बात जोड़ते हैं तो मैं इसकी सराहना करूंगा, धन्यवाद
Roee Adler

@ क्रैक्स: किया; @pratik: अब आप मुझे भ्रमित कर रहे हैं: आप "मल्टी-फाइल असेंबली" के बारे में फिर से बात करते हैं, जबकि @GregD ने उल्लेख किया कि यह वास्तव में एक "मल्टी-असेंबली फ़ाइल" थी - अब क्या है ?? (जैसा कि मैंने कहा - मैंने कभी इस तरह के जानवर का सामना नहीं किया है, इसलिए मैं थोड़ा अस्पष्ट हूं कि क्या यह प्रति फ़ाइल कई विधानसभाएं हैं, या प्रति विधानसभा कई फाइलें ....)
marc_s

3
"उस संकलित कोड को विधानसभा में भी संग्रहीत किया जाएगा और बाद की कॉल पर पुन: उपयोग किया जाएगा।" यह भ्रामक और / या बहुत स्पष्ट नहीं है। कोई संकलित कोड किसी असेंबली में "संग्रहीत" नहीं है। मुझे लगता है कि जब आप पहली बार कॉल करते हैं तो आप प्रत्येक विधि / फ़ंक्शन को मूल कोड में "jitted" कर सकते हैं। फिर, जब असेंबली स्मृति में होती है, तो विधि का मूल कोड संस्करण कहा जाता है। यदि असेंबली को अनलोड किया जाता है, और बाद में पुनः लोड किया जाता है, तो जिट प्रक्रिया फिर से हो जाएगी। बेशक यह मानता है कि आप अपनी असेंबली को मूल कोड (अनुशंसित नहीं) के संकलन के लिए NGEN का उपयोग नहीं कर रहे हैं।
ऐश

13

.NET असेंबली

Microsoft .NET फ्रेमवर्क में, एक असेंबली एक आंशिक रूप से संकलित कोड लायब्रेरी है जो परिनियोजन, संस्करण और सुरक्षा में उपयोग के लिए है।


7

http://www.codeguru.com/columns/csharp_learning/article.php/c5845

असेंबली एक फ़ाइल है जो कंपाइलर द्वारा प्रत्येक .NET एप्लिकेशन के सफल संकलन पर स्वचालित रूप से उत्पन्न होती है। यह डायनेमिक लिंक लाइब्रेरी या निष्पादन योग्य फ़ाइल हो सकती है। यह केवल एक आवेदन के लिए एक बार उत्पन्न होता है और प्रत्येक बाद के संकलन पर विधानसभा को अद्यतन किया जाता है।


2
असेंबलियां उन फ़ाइलों से अलग होती हैं जिनमें उन्हें शामिल किया गया है।
ग्रेग डी।

1
@ राघव - आकाश के लिए कुछ आकस्मिक के साथ अपनी तस्वीर अपडेट करें! हम पासपोर्ट के लिए यहाँ प्रस्तुत नहीं कर रहे हैं, आप जानते हैं!
TheFlash

3

यहाँ .NET असेंबली, एक मिनी-उद्धरण का एक और स्पष्टीकरण दिया गया है:

.NET फ्रेमवर्क में मॉड्यूल, असेंबली की अवधारणाएं होती हैं, जो मेटाडेटा और प्रकट जानकारी दोनों को संग्रहीत करती हैं। एक विधानसभा में कई मॉड्यूल हो सकते हैं। विजुअल C # केवल कभी एक मॉड्यूल बनाता है जिसे C # कंपाइलर (csc.exe) द्वारा असेंबली में बदल दिया जाता है, लेकिन असेंबली लिंकर (al.exe) कमांड-लाइन टूल के माध्यम से एक असेंबली कई .NET मॉड्यूल को एक साथ लिंक कर सकती है। उदाहरण के लिए आपके प्रत्येक स्रोत कोड .cs फाइलें एक मॉड्यूल में संकलित की जा सकती हैं और एक साथ मिलकर एक असेंबली बनाई जा सकती हैं - एक असेंबली सिर्फ मॉड्यूल और संसाधनों का एक संग्रह है। हालांकि, इनमें से एक मॉड्यूल; सीएलआर द्वारा समझी जाने वाली विधानसभा के लिए प्रकट मेटाडेटा (नीचे देखें) जानकारी होनी चाहिए।
....
एक नया .exe या .dll अंदर VS.NET बनाने के बाद आप अपनी फ़ाइल को अपने बिन फ़ोल्डर के अंदर दिखाई देते हैं। नोटपैड में इसे खोलने से फ़ाइल की संरचना को जाने बिना गीबर्किश, या यहां तक ​​कि एक हेक्साडेसिमल संपादक के अंदर भी मिल जाएगा, आपको इसका अर्थ निकालने के लिए ildasm.exe या CFF एक्सप्लोरर जैसे उपकरण की आवश्यकता है। विधानसभा की संरचना इस प्रकार है:

पीई हेडर
सीएलआर हेडर
सीएलआर मेटाडेटा
सीएलआर
आईएल कोड
नेटिव डेटा


वह लिंक मुझे कहाँ ले जा रहा है? अनंत पुनर्निर्देश! कुछ रीडायरेक्ट के बाद यह मेरे एक पृष्ठ है कि कहते हैं पर उतर आए इस । आपके द्वारा पोस्ट किया गया मूल URL प्राप्त करने का कोई तरीका नहीं है।
शनि S

2

जवाब तत्काल लोभी करने के लिए है।

सीधे शब्दों में कहें, यह संकलित परियोजना है जिसमें आपकी कक्षाएं और अतिरिक्त फाइलें शामिल हैं, यदि हैं। यही है, एक समाधान में प्रत्येक परियोजना विधानसभा है

या अधिक से अधिक,

एक असेंबली वह जगह है जहां एक प्रकार मांसल प्रणाली में संग्रहीत किया जाता है। कोड कोड करने के लिए असेंबली एक तंत्र है। उदाहरण के लिए, System.Data.dll विधानसभा में डेटा के प्रबंधन के लिए प्रकार होते हैं। अन्य विधानसभाओं में प्रकारों का उपयोग करने के लिए, उन्हें संदर्भित किया जाना चाहिए। - स्रोत

हम इसे कैसे जानते हैं? यदि आप समाधान के तहत किसी परियोजना के गुणों को देखते हैं तो आप निम्नलिखित चित्र देख सकते हैं।

जब आप प्रोजेक्ट संकलित करते हैं, तो यह DLL या EXE के लिए निकलता है ।

यहां छवि विवरण दर्ज करें यहां छवि विवरण दर्ज करें यहां छवि विवरण दर्ज करें


1

जब एक स्रोत कोड भाषा संकलक द्वारा संकलित किया जाता है तो यह एक प्रबंधित विधानसभा और MSIL (MisroSoft मध्यवर्ती भाषा) उत्पन्न करता है । उस असेंबली में .dll या .exe फ़ाइल होती है । एक Assebmly दो प्रकार की हो सकती है निजी असेंबली और साझा असेंबली , साझा असेंबली को GAC (वैश्विक असेंबली कैश) में संग्रहीत किया जाता है, ताकि कोई भी एप्लिकेशन इसे संदर्भित कर सके, जबकि निजी असेंबली को एप्लिकेशन फ़ोल्डर में संग्रहीत किया जाता है, जिसका उपयोग केवल एक अनुप्रयोग द्वारा किया जा सकता है।


0

एक असेंबली एक DLL या एक EXE है जो आपके द्वारा प्रकाशित करने पर या आपके एप्लिकेशन को संकलित करने पर बनाई जाएगी।


0

एक विधानसभा तार्किक इकाइयों का एक संग्रह है। तार्किक इकाइयाँ उन प्रकारों और संसाधनों को संदर्भित करती हैं जो किसी अनुप्रयोग को बनाने और उन्हें .Net ढांचे का उपयोग करके तैनात करने के लिए आवश्यक होते हैं। मूलतः, असेंबली Exe और DLL का एक संग्रह है। यह पोर्टेबल और निष्पादन योग्य है।


-1

आपके प्रोग्राम (प्रोजेक्ट) का सोर्स कोड लिखने के बाद फिर एक फाइल बनाई जाती है जो DLL हो सकती है या EXE आपके प्रोजेक्ट पर निर्भर करती है। यह एक ही परियोजना के लिए केवल एक बार बनाता है। इसके दो प्रकार हैं 1: - एकल 2: - साझा या मल्टीप्रोग्राम सिंगल असेंबली का उपयोग केवल एक ही प्रोग्राम में किया जाता है जबकि साझा मल्टीग्राम के लिए इस्तेमाल किया जा सकता है


आपके प्रोग्राम (प्रोजेक्ट) का सोर्स कोड लिखने के बाद फिर एक फाइल बनाई जाती है जो DLL हो सकती है या EXE आपके प्रोजेक्ट पर निर्भर करती है - सोर्स कोड लिखने के बाद? ऐसा प्रतीत नहीं होता है कि जब फ़ाइल बनाई जाती है, तो वह बहुत अच्छा संकेत होता है, जिसे बीटीडब्ल्यू ने दिया है।
Sain atошƒаӽ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.