.NET में GAC क्या है?


187

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

जवाबों:


177

ठीक है, इसलिए मूल रूप से यह संघर्ष के बारे में चिंता किए बिना DLL को वैश्विक रूप से सुलभ रखने का एक तरीका है। कोई और डीएलएल नर्क। प्रत्येक वास्तुकला और संस्करण को रहने के लिए अपना स्थान प्राप्त होता है।

यह एक्सप्लोरर में इसे ब्राउज़ करने का अपना तरीका भी है, इसलिए यदि आप जाते हैं

C: \ Windows \ विधानसभा

विंडोज़ एक्सप्लोरर में यह सभी DLL को सूचीबद्ध करता है।

लेकिन अगर आप आग लगाते हैं cmd, तो आप देख सकते हैं कि यह वास्तव में कैसे संरचित है:

C: \ Users \ tritter> cd C: \ Windows \ असेंबली

C: \ Windows \ विधानसभा> dir

 C: \ Windows \ विधानसभा की निर्देशिका

07/20/2009 02:18 PM <DIR> जीएसी
06/17/2009 04:22 PM <DIR> GAC_32
06/17/2009 04:22 PM <DIR> GAC_64
06/17-2009 04:22 अपराह्न <DIR> GAC_MSIL
 ... स्निप ...
               0 फ़ाइल (ओं) को 0 बाइट्स
               9 डिर (एस) 90,538,311,680 बाइट्स मुफ्त

C: \ Windows \ विधानसभा> सीडी GAC_64

C: \ Windows \ विधानसभा \ GAC_64> dir

 C: \ Windows \ विधानसभा \ GAC_64 की निर्देशिका

06/17-2009 04:22 अपराह्न <DIR>।
06/17-2009 04:22 अपराह्न <DIR> ।।
01/19/2008 09:54 AM <DIR> blbproxy
 ... स्निप ...
01/19/2008 09:54 AM <DIR> srmlib
01/19/2008 06:11 AM <DIR> System.Data
01/19/2008 06:11 AM <DIR> System.Data.OracleClient
 ... स्निप ...
               0 फ़ाइल (ओं) को 0 बाइट्स
              34 डिर (एस) 90,538,311,680 बाइट्स मुफ्त

C: \ Windows \ Assembly \ GAC_64> cd System.Data

C: \ Windows \ विधानसभा \ GAC_64 \ System.Data> dir
 C: \ Windows \ विधानसभा \ GAC_64 \ System.Data की निर्देशिका

01/19/2008 06:11 AM <DIR>।
01/19/2008 06:11 AM <DIR> ।।
04/11/2009 12:20 PM <DIR> 2.0.0.0__b77a5c561934e089
               0 फ़ाइल (ओं) को 0 बाइट्स
               3 डीआर (एस) 90,538,311,680 बाइट्स मुफ्त

C: \ Windows \ विधानसभा \ GAC_64 \ System.Data> सीडी 2.0.0.0__b77a5c56195e89

C: \ Windows \ विधानसभा \ GAC_64 \ System.Data \ 2.0.0.0__b77a5c561934e089> dir

 सी की निर्देशिका: \ Windows \ विधानसभा \ GAC_64 \ System.Data \ 2.0.0.0__b77a5c56195e89

04/11/2009 12:20 PM <DIR>।
04/11/2009 12:20 PM <DIR> ।।
04/11/2009 12:12 PM 3,008,512 System.Data.dll
               1 फ़ाइल (ओं) 3,008,512 बाइट्स
               2 डीआर (एस) 90,538,311,680 बाइट्स मुफ्त

C: \ Windows \ विधानसभा \ GAC_64 \ System.Data \ 2.0.0.0__b77a5c561934e089>

यहां आप System.Data का संस्करण 2.0.0.0__b77a5c561934e089 देख सकते हैं।

एक DLL को 5 भागों द्वारा पहचाना जाता है:

  1. नाम
  2. संस्करण
  3. आर्किटेक्चर
  4. संस्कृति
  5. सार्वजनिक कुंजी

हालांकि पहले 3 आम तौर पर बड़े होते हैं।


12
आपको यह उल्लेख करने के लिए एक +1 मिलता है कि यह "dll नरक" से बचने के लिए विश्व स्तर पर संदर्भ .dll का एक नया तरीका है। (यह एक और भी बेहतर उत्तर होगा यदि आप एक छोटी सी चक्कर में पड़ गए हैं कि नरक क्या है, और इसके चारों ओर जीएसी कैसे हो जाता है ... आपको इसकी मूल रूपरेखा मिल गई है ... लेकिन मैं अभी थोड़ा कसूंगा निर्देशिका संरचना इनसेट, और dll कैसे पहचाना जाता है और अद्वितीय है की एक बिट जोड़ें) बहुत नकारात्मक ध्वनि का मतलब नहीं है ... मैंने +1 दिया!
बेस्का

बस एक लिंक प्रदान न करें:]। आपके उत्तर के बारे में सवाल, "GAC_64" निर्देशिका नाम द्वारा निर्दिष्ट "3. आर्किटेक्चर" है? और क्या इस मामले में संस्कृति रिक्त है - वह मान जो "__" के बीच होगा?
डैनी बुल्लिस

2
क्या GAC केवल .NET ऐप्स के लिए मौजूद है?
Zach Smith

93

जीएसी = ग्लोबल असेंबली कैश

चलो इसे तोड़ दो:

  • वैश्विक - पूरी मशीन पर लागू होता है
  • असेंबली - क्या .NET अपने कोड-लाइब्रेरियों (DLL) को कॉल करता है
  • कैश - तेजी से / आम पहुंच के लिए चीजों को स्टोर करने का स्थान

इसलिए जीएसी को कोड लाइब्रेरीज़ को स्टोर करने के लिए एक जगह होनी चाहिए ताकि वे मशीन पर चलने वाले सभी एप्लिकेशन तक पहुंच सकें।


64

वैश्विक विधानसभा कैश

प्रत्येक कंप्यूटर जहां सामान्य भाषा रनटाइम स्थापित किया जाता है, उसमें मशीन-वाइड कोड कैश होता है जिसे वैश्विक असेंबली कैश कहा जाता है। वैश्विक असेंबली कैश स्टोर असेंबली को विशेष रूप से कंप्यूटर पर कई अनुप्रयोगों द्वारा साझा किए जाने के लिए नामित किया गया है।

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

MSDN में जो चीजें हैं, वे आपको आश्चर्यचकित कर सकती हैं ... आप इसे आमतौर पर एक लेख की तरह पढ़ सकते हैं। शीर्ष पर सीधी और सबसे महत्वपूर्ण बिट्स, जटिल विवरण गहरा हो जाता है। यह निश्चित रूप से मुझे बता सकता है कि यह बेहतर है।

ध्यान दें कि Visual Studio GAC के सभी DLL को संदर्भ विंडो के .NET टैब में प्रदर्शित करता है । (समाधान एक्सप्लोरर में एक परियोजना पर राइट-क्लिक करें और संदर्भ जोड़ें का चयन करें।) यह आपको अधिक मूर्त विचार देना चाहिए।


उन्होंने कहा कि कोई लिंक नहीं है, अपने शब्दों में स्पष्टीकरण चाहते हैं।
user142350

अपने पोस्ट के मूल संस्करण में (मेरा मानना ​​है कि उन्होंने इसे जल्दी से संपादित किया), यह निर्दिष्ट नहीं था!
नोल्डोरिन

15
साथ ही, MSDN के शब्द हमेशा बेहतर और अधिक सटीक होने वाले हैं। :)
नोल्डोरिन १२'०


12

वैश्विक असेंबली कैश (GAC) .NET असेंबली को संग्रहीत करने के लिए विंडोज निर्देशिका में एक फ़ोल्डर है जिसे विशेष रूप से सिस्टम पर निष्पादित सभी अनुप्रयोगों द्वारा साझा किए जाने के लिए निर्दिष्ट किया जाता है। असेंबलियों को वैश्विक असेंबली कैश (GAC) में पंजीकृत करके मशीन पर कई अनुप्रयोगों के बीच साझा किया जा सकता है। GAC एक मशीन है जो .NET फ्रेमवर्क द्वारा रखी गई असेंबली का एक स्थानीय कैश है।


11

Exe आवेदन, सबसे पहले, एक वर्तमान निर्देशिका से एक उपनिर्देशिका का संदर्भ। और फिर, सिस्टम निर्देशिका। VS6.0 सिस्टम निर्देशिका थी .. विंडोज / सिस्टम 32। .NET सिस्टम निर्देशिका नीचे GAC पथ की तरह है।

  1. जीएसी पथ

    1) C: \ Windows \ असेंबली (.NET 2.0 ~ 3.5 के लिए)

    2) C: \ Windows \ Microsoft.NET \ विधानसभा (.NET 4.0 के लिए)

  2. GAC (व्यवस्थापक के रूप में) में असेंबली कैसे स्थापित करें

    1) ड्रैग एंड ड्रॉप

    2) Visual Studio कमांड प्रॉम्प्ट के साथ GacUtil.exe का उपयोग करें

     gacutil -i [Path][Assembly Name].dll
    • नोट: GAC में असेंबली स्थापित करने के लिए, असेंबली का दृढ़ता से नाम होना चाहिए। अन्यथा आपको इस तरह की त्रुटि मिलती है: असेंबली को कैश में जोड़ना विफल: एक मजबूत नाम के बिना असेंबली स्थापित करने का प्रयास।
  3. GAC से एक असेंबली की स्थापना रद्द कैसे करें (व्यवस्थापक के रूप में)

     gacutil -u [Assembly Name], Version=1.0.0.0, PublickeyToken=7896a3567gh
    • नोट: कोई विस्तार नहीं है, .dll संस्करण और PublickeyToken को छोड़ा जा सकता है और GAC असेंबली में जाँच की जा सकती है।

5

यह COM रजिस्ट्री की तरह ही सही है, भौतिक फ़ाइलों के साथ-साथ उनके इंटरफ़ेस और स्थान की जानकारी के संबंध में। COM में, फ़ाइलें हर जगह केंद्रीकृत मेटाडेटा के साथ थीं। जीएसी धमाकेदार शूटिंग को केंद्रीकृत करता है।


5

GAC (ग्लोबल असेंबली कैश) वह जगह है जहाँ सभी साझा .NET असेंबली रहते हैं।

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