GAC से असेंबली कैसे निकालें?


134

एक ऐसा पैकेज है जिससे मुझे निपटना है जो असेंबली को सीधे जीएसी में स्थापित करता है (जैसे कि% विंडोज़% / असेंबली में कहीं गहरा)।

GAC से वास्तविक असेंबली (DLL) को सामान्य फ़ाइल सिस्टम में कैसे निकालूँ?

धन्यवाद।

जवाबों:


150

मैंने इस लेख से GAC से असेंबली प्राप्त करने के लिए सलाह का उपयोग किया ।

GAC से DLL प्राप्त करें

एक बार GAC में तैनात DLLs (आमतौर पर c: \ windows \ विधानसभा में स्थित) को एक सामान्य DLL फ़ाइल के रूप में देखा या उपयोग नहीं किया जा सकता है। उन्हें सीधे वीएस प्रोजेक्ट से संदर्भित नहीं किया जा सकता है। डेवलपर्स आमतौर पर मूल डीएलएल फ़ाइल की एक प्रति रखते हैं और इसे परियोजना में विकास (डिजाइन) समय पर संदर्भित करते हैं, जो परियोजना के रन-टाइम के दौरान जीएसी से विधानसभा का उपयोग करता है।

निष्पादन के दौरान (रन-टाइम) यदि विधानसभा को हस्ताक्षरित पाया जाता है और जीएसी में तैनात किया जाता है तो सीएलआर स्वचालित रूप से वीएस में डिज़ाइन समय के दौरान संदर्भित डीएलएल के बजाय जीएसी से विधानसभा को चुनता है। यदि डेवलपर ने मूल DLL को हटा दिया है या किसी कारण से नहीं है, तो GAC से DLL फ़ाइल प्राप्त करने का एक तरीका है। GAC से DLL की प्रतिलिपि बनाने के लिए निम्नलिखित चरणों का पालन करें

  1. Regsvr32 / u C चलाएं: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ shuusionbll

    • shfusion.dll एक एक्सप्लोरर एक्सटेंशन DLL है जो GAC फ़ोल्डर को एक अलग रूप देता है। इस फ़ाइल को अपंजीकृत करने से असेंबली कैश व्यूअर को हटा दिया जाएगा और GAC फ़ोल्डर तब एक्सप्लोरर में किसी भी सामान्य फ़ोल्डर के रूप में दिखाई देगा।
  2. "% विंडर% \ असेंबली \ GAC_MSIL" खोलें।

  3. अपने DLL को खोजने के लिए अपने DLL फ़ोल्डर को गहराई से ब्राउज़ करें।

  4. DLL को अपनी हार्ड डिस्क पर कहीं कॉपी करें और इसे अपनी परियोजना में वहां से देखें

  5. Shfusion.dll फ़ाइल को फिर से पंजीकृत करने और GAC के मूल विशिष्ट दृश्य को पुनः प्राप्त करने के लिए "regsvr32% windir% \ Microsoft.NET \ Framework \ <। NET संस्करण निर्देशिका> \ shfusion.dll" चलाएँ।


81
यह काम करता है लेकिन थोड़ा जटिल है। यदि आप कमांड प्रॉम्प्ट से डरते नहीं हैं, तो आप बस आवश्यक निर्देशिका में सीडी और डीएलएल को कॉपी कर सकते हैं।
चेसो

3
बस TotalCommander स्थापित करें, सभी छिपी हुई फ़ाइलों को देखने के विकल्प को सक्षम करें और आप अपनी इच्छित हर असेंबली को हथिया सकते हैं
पैट्रिक पीटर्स

4
@ और, ऐसा लगता है कि विकल्प द्वारा पारित प्रविष्टि बिंदु का shfusion.dllसमर्थन नहीं करता है। उस विकल्प को स्वीकार करने से घटक को फिर से सफलतापूर्वक पंजीकृत करने की अनुमति मिलती है। DllInstall()regsvr32/i
Frédéric Hamidi

9
आप चरण 1 और 2 को छोड़ सकते हैं, और सीधे विंडीर% \ असेंबली \ GAC_MSIL पर जा सकते हैं और वहां से ब्राउज़ कर सकते हैं।
ईसाई फ्रेड

5
@ChristianFredh सिर्फ एक नोट: मेरे लिए, यह केवल रन डायलॉग से सीधे किया जा सकता है।
xr280xr

108

यहाँ वर्णित विधि बहुत आसान है:

http://andreasglaser.net/post/2008/08/05/Extract-assembly-from-Global-Assembly-Cache-(GAC)-with-network-drive-mapping.aspx

लेख से सारांश:

  • नेटवर्क ड्राइव (एक्सप्लोरर -> उपकरण) मैप करें
    • मैप टू \ सर्वरनाम \ फ़ोल्डर ( \\YourServer\C$\Windows\Assembly)
  • यदि आप व्यवस्थापक हैं तो साझा करने की कोई आवश्यकता नहीं है
  • ड्राइव पर ब्राउज़ करें और अपनी असेंबली निकालें

84

कमांड प्रॉम्प्ट खोलें और टाइप करें:

cd  c:\windows\assembly\GAC_MSIL 

xcopy . C:\GacDump /s /y

यह पूरे जीएसी का डंप देना चाहिए

का आनंद लें!


10
दीपक का जवाब स्पष्ट था और उपयुक्त झंडे के साथ xcopy का इस्तेमाल किया।
22

मैं इस उत्तर को # 1 दर करूंगा क्योंकि चरण-दर-चरण दृष्टिकोण पर मुद्दों को मारने के बाद सब कुछ पाने में 5 सेकंड का समय लगा।
FBryant87

24

हाँ।

DisableCacheViewer रजिस्ट्री कुंजी जोड़ें

DisableCacheViewer नाम के साथ HKLM \ Software \ Microsoft \ Fusion \ के तहत एक नई dword कुंजी बनाएं और इसे [DWORD] मान 1 पर सेट करें।

असेंबली फ़ोल्डर में विंडोज एक्सप्लोरर पर वापस जाएं और यह सामान्य फ़ाइल सिस्टम दृश्य होगा।


2
अंडर रेटेड जवाब। धन्यवाद!
xr280xr

1
यही वास्तविक समाधान है। पूर्ववत करना आसान है, और कोई कमांड लाइन आवश्यक नहीं है।
user2920518

16

मुझे लगता है कि सबसे आसान तरीका यह है कि डेविड कमांड की तरह कमांड लाइन के माध्यम से इसे करें। एकमात्र चाल यह है कि .dll केवल C: \ Windows \ Assembly में स्थित नहीं है। आपको C: \ Windows \ Assembly \ GAC \ [ASSEMBLY_NAME] \ [VERSION_NUMBER] _ [सार्वजनिक कुंजी] पर नेविगेट करना होगा। तब आप एक कॉपी का उपयोग कर सकते हैं:

कॉपी [ASSEMBLY_NAME] .dll c: \ (या जो भी स्थान आप चाहते हैं)

उम्मीद है की वो मदद करदे।


13

आसान तरीका जो मैंने पाया है वह कमांड प्रॉम्प्ट को खोलने और आपके द्वारा उल्लिखित फ़ोल्डर के माध्यम से ब्राउज़ करने के लिए है जब तक आप डीएलएल नहीं चाहते हैं - आप इसे बाहर निकालने के लिए कॉपी कमांड को उपयोगकर्ता कर सकते हैं। विंडोज एक्सप्लोरर में इस फ़ोल्डर का "सहायक" विशेष दृश्य है।


मुझे आज सुबह एक दिलचस्प मुद्दा मिला। मैं GAC में DLL अपडेट कर रहा था, और बैकअप लेने के लिए cmd लाइन विधि का उपयोग करता था। जब मैंने नया DLL (समान संस्करण संख्या) अपलोड करने का प्रयास किया, तो मुझे एक त्रुटि मिली जो केवल तब ही चली गई जब मैंने cmd विंडो को बंद कर दिया। मुझे यह पता लगाने के लिए कि क्या गलत हो रहा था, कुछ मिनटों को कोस लिया!
9

11

उसके बाद RUN खोलें %windir%\assembly\GAC_MSIL, यह आपके dll को फ़ोल्डर्स के दृश्य में खोलेगा जिसे आप तब अपने dll नाम के फ़ोल्डर में नेविगेट कर सकते हैं और इसे खोल सकते हैं, आपको अपनी dll फाइल मिल जाएगी और इसे आसानी से कॉपी कर सकते हैं।


बहुत ही आसान उपाय। धन्यवाद।
Dblock247

4

मैं PowerShell GAC का लेखक हूं । PowerShell GAC के साथ आप GAC इंटर्नल के आधार पर असेंबली को असेंबली से निकाल सकते हैं जैसे फ़ोल्डर संरचना बदलना।

Get-GacAssembly SomeCompany* | Get-GacAssemblyFile | Copy-Item -Dest C:\Temp\SomeCompany

3

यह MSDN ब्लॉग पोस्ट GAC से DLL निकालने के तीन अलग-अलग तरीकों का वर्णन करता है। अब तक दिए गए तरीकों का एक उपयोगी सारांश।


3

इसके बजाय फ़ाइल ब्राउज़र "कुल कमांडर" का उपयोग करें।

  1. टोटल कमांडर में "शो हिडन / सिस्टम फाइल्स" सेटिंग को इनेबल करें
  2. "C: \ windows \ विधानसभा" के लिए ब्राउज़ करें
  3. प्रतिलिपि

3

मुझे लगता है कि मैंने रजिस्ट्री को संशोधित किए बिना या कमांड लाइन, पावरशेल या किसी अन्य प्रोग्राम का उपयोग किए बिना जीएसी के अंदर देखने का एक तरीका निकाला है:

एक नया शॉर्टकट बनाएं (कहीं भी)। फिर लक्ष्य के लिए शॉर्टकट को संशोधित करें:

%windir%\assembly\GAC_MSIL\System

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

मैंने इसे विंडोज 7 और विंडोज़ सर्वर 2012 पर परीक्षण किया।

नोट: यह शॉर्टकट बनाते समय आपको उस लक्ष्य का उपयोग नहीं करने देगा लेकिन यह आपको इसे संपादित करने देगा।

का आनंद लें!


2

बस C: \ Windows पर जाएं [विधानसभा] फ़ोल्डर राइट क्लिक करें और संग्रह में जोड़ें चुनें

थोड़ा इंतज़ार करें

आप अपने जीएसी में सभी विधानसभाओं युक्त एक संग्रह फ़ाइल है


2

पॉवरशेल स्क्रिप्ट से, आप यह कोशिश कर सकते हैं। मेरे पास GAC में केवल असेंबली का एक ही संस्करण था, इसलिए यह ठीक काम कर रहा था।

cd "c:\Windows\Microsoft.NET\assembly\GAC_MSIL\"
Get-ChildItem assemblypath -Recurse -Include *.dll |  Copy-Item -Destination "c:\folder to copy to"

जहां विधानसभा पथ वाइल्डकार्ड का उपयोग कर सकते हैं।


0

एक अन्य दिशा - बस MSI फ़ाइल को अनपैक करें और उस तरह से उपहार प्राप्त करें। आपको अंतिम रूप से अनइंस्टॉल से बचाता है। । ।


0

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

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