2013-02-15 41 views
8

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

मैं अपने प्रोजेक्ट में कुछ DLL के जोड़ने के लिए कोशिश कर रहा हूँ, लेकिन उनमें से कुछ से आ रहे हैं:

C:\Windows\Microsoft.NET\Framework\v3.5\XXX.YYY.dll 

और मैं क्या उम्मीद कर इस GAC से आ जाना चाहिए।

कृपया मुझे विजुअल स्टूडियो में डीएल के संदर्भ में सबसे अच्छा अभ्यास सुझाएं।

उत्तर

23

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

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

यह भी कारण है कि जब आप एक्सप्लोरर के साथ c: \ windows \ assembly पर नेविगेट करते हैं तो आप सीधे जीएसी फ़ोल्डरों को नहीं देख सकते हैं। एक शेल एक्सटेंशन हैंडलर आपको एक संदर्भ असेंबली के रूप में एक GAC-ed असेंबली जोड़ने जैसी गलती करने से रोकने के लिए विवरण छुपाता है। यह एक्सटेंशन एक्सटेंशन हैंडलर .NET 4 असेंबली के लिए स्थापित नहीं है, आप c: \ windows \ microsoft.net \ assembly पर देख सकते हैं और जीएसी की संरचना देख सकते हैं। मान लें कि अब से संदर्भ जोड़ने के लिए ठीक है, .NET 4 में संदर्भ असेंबली और भी महत्वपूर्ण हैं, वे रनटाइम असेंबली से बिल्कुल अलग हैं।

इसलिए सी: \ विंडोज \ माइक्रोसॉफ्ट.NET \ Framework \ v3.5 में संग्रहीत संदर्भ असेंबली को पूरी तरह सामान्य है, यह System.Core.dll जैसे .NET 3.5 विशिष्ट संदर्भ असेंबली के लिए होम निर्देशिका है। .NET 4 प्रोजेक्ट्स के लिए संदर्भ असेंबली c: \ प्रोग्राम फ़ाइलों \ संदर्भ असेंबली में संग्रहीत हैं, उन्हें संदर्भ C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 होना चाहिए। this answer देखें कि सही संदर्भ असेंबली का उपयोग न करने के कारण किस तरह का अपरिहार्य दुःख हो सकता है।

+4

अच्छा जवाब, इसे सही उत्तर के रूप में स्वीकार किया जाना चाहिए :) –

+0

यह मेरे लिए काम करता है (मेरी पोस्ट देखें) [लिंक (http://stackoverflow.com/questions/444655/how-can-i-reference- एक-dll-इन-द-गाक-से-विजुअल स्टूडियो) –

1

वे असेंबली .NET Framework 3.5 की असेंबली हैं। विधानसभा कैश

%SystemRoot%\assembly 

पर स्थित है आप अपनी परियोजना के साथ एक साथ वितरित कर सकते हैं .NET Framework 3.5 (पेज के अंत स्क्रॉल करें)। एएसओ यदि आप वीएस सेटअप परियोजनाओं का उपयोग कर रहे हैं तो आप इसे संदर्भित करने के लिए प्रॉपर्टी पेज का उपयोग कर सकते हैं।

उन असेंबली को संदर्भित करने के लिए आप आसानी से "संदर्भ"> "संदर्भ जोड़ें" पर राइट-क्लिक कर सकते हैं और .NET टैब से असेंबली का चयन कर सकते हैं। जीएसी असेंबली के संदर्भ में this question देखें।