2010-06-16 11 views
60

मैं जीएसी में एक डीएल (CatalogPromotion.dll) पंजीकृत करने के लिए विजुअल स्टूडियो कमांड प्रॉम्प्ट 2010 के भीतर से GacUtil.exe चला रहा हूं। उपयोगिता चलाने के बाद, यह Assembly Successfully added to the cache कहता है, और gacutil /l CatalogPromotionDll चल रहा है यह दिखाता है कि जीएसी में असेंबली है, लेकिन जब मैं विंडोज एक्सप्लोरर से सी: \ विन्डोज़ \ असेंबली पर नेविगेट करता हूं तो मैं असेंबली नहीं देख सकता। मैं विंडोज एक्सप्लोरर से विन्डोज़ \ असेंबली में असेंबली क्यों नहीं देख सकता लेकिन मैं इसे gacutil.exe का उपयोग करके देख सकता हूं?Gacutil.exe सफलतापूर्वक असेंबली जोड़ता है, लेकिन असेंबली में असेंबली देखने योग्य नहीं है। क्यूं कर?


पृष्ठभूमि: यहाँ है कि मैं क्या वी.एस. उपकरण के लिए कमांड प्रॉम्प्ट में टाइप है:

 

    C:\_Dev Projects\VS Projects\bmccormack\CatalogPromotion\CatalogPromotionDll\bin 
    \Debug>gacutil /i CatalogPromotionDll.dll 
    Microsoft (R) .NET Global Assembly Cache Utility. Version 4.0.30319.1 
    Copyright (c) Microsoft Corporation. All rights reserved. 

    Assembly successfully added to the cache 

    C:\_Dev Projects\VS Projects\bmccormack\CatalogPromotion\CatalogPromotionDll\bin 
    \Debug>gacutil /l CatalogPromotionDll 
    Microsoft (R) .NET Global Assembly Cache Utility. Version 4.0.30319.1 
    Copyright (c) Microsoft Corporation. All rights reserved. 

    The Global Assembly Cache contains the following assemblies: 
     CatalogPromotionDll, Version=1.0.0.0, Culture=neutral, PublicKeyToken=9188a175 
    f199de4a, processorArchitecture=MSIL 

    Number of items = 1 

हालांकि, विधानसभा नहीं ऊपर सी में दिखाता है: \ WINDOWS \ विधानसभा।

उत्तर

103

ऐसा इसलिए है क्योंकि आप gacutil.exe के .NET 4.0 संस्करण का उपयोग करते हैं। यह असेंबली को अलग-अलग जीएसी में संग्रहीत करता है, सी: \ windows \ microsoft.net \ assembly में से एक। जहां सभी .NET 4.0 असेंबली संग्रहीत हैं। उस के लिए कोई खोल एक्सटेंशन हैंडलर नहीं है, फ़ोल्डरों के रूप में दिखाई दे रहे हैं। आप विंडोज एक्सप्लोरर के साथ एक नज़र देख सकते हैं, आप जीएसी फ़ोल्डर्स की आंतरिक संरचना देखेंगे। आपको अपनी असेंबली को वापस पाने में कोई परेशानी नहीं होनी चाहिए, जीएसी विशेष रूप से जटिल नहीं है।

यदि असेंबली का उद्देश्य किसी ऐप द्वारा उपयोग किया जाना है जो .NET के पुराने संस्करण को लक्षित करता है तो आपको gacutil.exe के .NET 2.0 संस्करण का उपयोग करना चाहिए, C: \ Program Files \ Microsoft SDKs \ Windows \ v6.0A \ bin

+0

विधानसभा कॉम के साथ एक VB6 एप्लिकेशन द्वारा उपयोग के लिए लक्षित है के लिए जमा हो जाती है। मैंने '\ v7.0.A \ bin' में gacutil.exe के 3.5 संस्करण का उपयोग करने का प्रयास किया, लेकिन उपयोगिता का वह संस्करण .NET 4.0 असेंबली स्थापित नहीं कर सकता है। –

+1

वीबी 6 परवाह नहीं है कि आप .NET का किस संस्करण का उपयोग करते हैं। यह .NET 4.0 के साथ ठीक काम करेगा। आप इस बारे में सोचना शुरू कर सकते हैं कि आप लक्ष्य मशीन पर इसे कैसे तैनात करते हैं। वहां कोई gacutil.exe उपलब्ध नहीं है, आपको एक सेटअप प्रोजेक्ट बनाना होगा। Regasm.exe/codebase विकल्प का उपयोग करके इसे डीबग करते समय जीएसी परेशानी से बचें। सलाह के लिए –

+0

धन्यवाद। क्या आप मुझे एक दिशा में इंगित कर सकते हैं जहां मैं regasm.exe/codebase के बारे में अधिक पढ़ सकता हूं? मैं तैनाती से संबंधित मुद्दों के बारे में सोच रहा हूं, और आप एक अच्छा मुद्दा लाते हैं कि gacutil.exe वहां उपलब्ध नहीं होगा। मैं सिर्फ यह देखने के लिए महसूस कर रहा हूं कि वीबी 6 ऐप में .NET घटकों का उपयोग करते समय यह कैसे किया जाना चाहिए। –

2

ऐसा इसलिए है क्योंकि आप जिस जीएसी में स्थापित कर रहे हैं वह 4.0 रनटाइम को लक्षित करने के लिए संकलित किया गया था। 4.0 जीएसी असेंबली एक अलग स्थान c: \ windows \ microsoft.net \ assembly में संग्रहीत हैं।

स्वीकृत उत्तर गलत है। एक असेंबली संकलित लक्ष्यीकरण 3.5 या इससे पहले के रनटाइम को स्थापित करने के लिए .NET 4.0 gacutil का उपयोग करना ठीक है, और ओपी की निर्देशिका में असेंबली को स्थानांतरित करेगा, c: \ windows \ assembly।

1

मार्ग है -> C: \ Windows \ Microsoft.NET \ विधानसभा \ GAC_MSIL जहां सभी विधानसभाओं .net 4.0 संस्करण

संबंधित मुद्दे