2009-08-12 10 views
130

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

+9

आप क्यों जुड़े हुए जवाब पर विस्तृत कर सके तरह MSDN या विकिपीडिया आप क्या चाहते हैं के लिए पर्याप्त नहीं हैं? –

+0

क्या आप शायद कुछ उपयोगकर्ता एप्लिकेशन में एक त्रुटि संदेश पर प्रतिक्रिया कर रहे हैं? – Jeff

+47

@ जेबी किंग: मैं इसे तकनीकी विनिर्देश या एक गूढ़ लेख के बजाय .NET के साथ अनुभवी किसी व्यक्ति से सादे शब्दों में सुनना पसंद करता हूं। – Nosrama

उत्तर

125

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

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

सी जाना: \ Windows \ विधानसभा

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

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

 
C:\Users\tritter>cd C:\Windows\assembly 

C:\Windows\assembly>dir 

Directory of C:\Windows\assembly 

07/20/2009 02:18 PM <DIR>   GAC 
06/17/2009 04:22 PM <DIR>   GAC_32 
06/17/2009 04:22 PM <DIR>   GAC_64 
06/17/2009 04:22 PM <DIR>   GAC_MSIL 
...snip... 
       0 File(s)    0 bytes 
       9 Dir(s) 90,538,311,680 bytes free 

C:\Windows\assembly>cd GAC_64 

C:\Windows\assembly\GAC_64>dir 

Directory of C:\Windows\assembly\GAC_64 

06/17/2009 04:22 PM <DIR>   . 
06/17/2009 04:22 PM <DIR>   .. 
01/19/2008 09:54 AM <DIR>   blbproxy 
...snip... 
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 
...snip... 
       0 File(s)    0 bytes 
       34 Dir(s) 90,538,311,680 bytes free 

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

C:\Windows\assembly\GAC_64\System.Data>dir 
Directory of C:\Windows\assembly\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 File(s)    0 bytes 
       3 Dir(s) 90,538,311,680 bytes free 

C:\Windows\assembly\GAC_64\System.Data>cd 2.0.0.0__b77a5c561934e089 

C:\Windows\assembly\GAC_64\System.Data\2.0.0.0__b77a5c561934e089>dir 

Directory of C:\Windows\assembly\GAC_64\System.Data\2.0.0.0__b77a5c561934e089 

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 File(s)  3,008,512 bytes 
       2 Dir(s) 90,538,311,680 bytes free 

C:\Windows\assembly\GAC_64\System.Data\2.0.0.0__b77a5c561934e089> 

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

एक DLL 5 भागों से पहचाना जाता है:

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

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

+8

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

+0

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

+0

क्या जीएसी केवल .NET ऐप्स के लिए मौजूद है? –

54

Global Assembly Cache

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

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

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

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

+0

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

+0

उन्होंने कहा कि कोई लिंक नहीं ... –

+0

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

19

केंद्रीकृत डीएलएल पुस्तकालय।

61

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

के इसे तोड़ने के नीचे दो:

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

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

5

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

5

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

6

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

6

एक्सई एप्लिकेशन, सबसे पहले, वर्तमान निर्देशिका से उपनिर्देशिका में संदर्भ। और फिर, सिस्टम निर्देशिका। वीएस 6.0 सिस्टम निर्देशिका .. विन्डोज़/system32 था। .NET सिस्टम निर्देशिका नीचे दिए गए जीएसी पथ की तरह है।

  1. GAC पथ

    1) C: \ Windows \ सभा (.NET 2.0 के लिए ~ 3,5)

    2) सी: \ WINDOWS \ Micorosoft.NET \ विधानसभा (के लिए .NET 4.0)

  2. (

    1) खींचें GAC में एक विधानसभा स्थापित करने के लिए प्रशासक के रूप में) और ड्रॉप

    2) GacUtil का उपयोग करें।दृश्य स्टूडियो कमान के साथ exe के लिए प्रेरित करें

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

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