How to extract an assembly from the GAC?

.NetAssemblies

.Net Problem Overview


There is a package I have to deal with which installs assemblies straight into the GAC (e.g. somewhere deep in %windows%/assembly).

How do I exorcise the actual assembly (the DLL) from the GAC into the normal file system?

Thanks.

.Net Solutions


Solution 1 - .Net

I used the advice from this article to get an assembly from the GAC.

> Get DLL Out of The GAC

> DLLs once > deployed in GAC (normally located at > c:\windows\assembly) can’t be viewed > or used as a normal DLL file. They > can’t be directly referenced from VS > project. Developers usually keep a > copy of the original DLL file and > refer to it in the project at > development (design) time, which uses > the assembly from GAC during run-time > of the project. > > During execution (run-time) if the > assembly is found to be signed and > deployed in GAC the CLR automatically > picks up the assembly from the GAC > instead of the DLL referenced during > design time in VS. In case the > developer has deleted the original DLL > or don't have it for some reason, > there is a way to get the DLL file > from GAC. Follow the following steps > to copy DLL from GAC > > 1. Run regsvr32 /u C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\shfusion.dll > - shfusion.dll is an explorer extension DLL that gives a distinct > look to the GAC folder. Unregistering > this file will remove the assembly > cache viewer and the GAC folder will > be then visible as any normal folder > in explorer. > > 2. Open “%windir%\assembly\GAC_MSIL”. > > 3. Browse to your DLL folder into the deep to find your DLL. > > 4. Copy the DLL somewhere on your hard disk and refer it from there in your > project > > 5. Run "regsvr32 %windir%\Microsoft.NET\Framework<.NET > version directory> \shfusion.dll" to > re-register the shfusion.dll file and > regain the original distinct view of > the GAC.

Solution 2 - .Net

The method described here is very easy:

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

Summary from Article:

  • Map a Network Drive (Explorer -> Tools)
  • Map to \servername\folder (\\YourServer\C$\Windows\Assembly)
  • No need for sharing if you are the Administrator
  • Browse to the drive and extract your assembly

Solution 3 - .Net

Open the Command Prompt and Type :

cd  c:\windows\assembly\GAC_MSIL 

xcopy . C:\GacDump /s /y

This should give the dump of the entire GAC

Enjoy!

Solution 4 - .Net

Yes.

Add DisableCacheViewer Registry Key

Create a new dword key under HKLM\Software\Microsoft\Fusion\ with the name DisableCacheViewer and set it’s [DWORD] value to 1.

Go back to Windows Explorer to the assembly folder and it will be the normal file system view.

Solution 5 - .Net

I think the easiest way is to do it through the command line like David mentions. The only trick is that the .dll isn't simply located at C:\Windows\Assembly. You have to navigate to C:\Windows\Assembly\GAC\[ASSEMBLY_NAME]\[VERSION_NUMBER]_[PUBLIC KEY]. You can then do a copy using:

copy [ASSEMBLY_NAME].dll c:\ (or whatever location you want)

Hope that helps.

Solution 6 - .Net

Easy way I have found is to open the command prompt and browse through the folder you mention until you find the DLL you want - you can then user the copy command to get it out. Windows Explorer has a "helpful" special view of this folder.

Solution 7 - .Net

Open RUN then type %windir%\assembly\GAC_MSIL, this will open your dlls in folders' view you can then navigate to your dll named folder and open it, you will find your dll file and copy it easily

Solution 8 - .Net

I am the author of PowerShell GAC. With PowerShell GAC you can extract assemblies from the GAC without depending on GAC internals like changing folder structures.

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

Solution 9 - .Net

This MSDN blog post describes three separate ways of extracting a DLL from the GAC. A useful summary of the methods so far given.

Solution 10 - .Net

Use the file browser "Total Commander" instead.

  1. Enable the "show hidden/system files" setting in Total Commander
  2. Browse to "c:\windows\assembly"
  3. copy

Solution 11 - .Net

Think I figured out a way to look inside the GAC without modifying the registry or using the command line, powershell, or any other programs:

Create a new shortcut (to anywhere). Then modify the shortcut to have the target be:

%windir%\assembly\GAC_MSIL\System

Opening this shortcut takes you to the System folder inside the GAC (which everyone should have) and has the wonderful side effect of letting you switch to a higher directory and then browsing into any other folder you want (and see the dll files, etc)

I tested this on windows 7 and windows server 2012.

Note: It will not let you use that target when creating the shortcut but it will let you edit it.

Enjoy!

Solution 12 - .Net

just navigate to C:\Windows find the [assembly] folder right click and select add to archive

wait a little

vola you have an archive file containing all the assemblies in your GAC

Solution 13 - .Net

From a Powershell script, you can try this. I only had a single version of the assembly in the GAC so this worked just fine.

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

where the assembly path can use wildcards.

Solution 14 - .Net

One other direction--just unpack the MSI file and get the goodies that way. Saves you from the eventual uninstall . . .

Solution 15 - .Net

Copying from a command line is unnecessary. I typed in the name of the DLL from the Start Window search. I chose See More Results. The one in the GAC was returned in the search window. I right clicked on it and said open file location. It opened in normal Windows Explorer. I copied the file. I closed the window. Done.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionAngryHackerView Question on Stackoverflow
Solution 1 - .NetAndrew HareView Answer on Stackoverflow
Solution 2 - .NetSadjadView Answer on Stackoverflow
Solution 3 - .NetDeepakView Answer on Stackoverflow
Solution 4 - .NetmccragerView Answer on Stackoverflow
Solution 5 - .NetAdamBView Answer on Stackoverflow
Solution 6 - .NetDavid MView Answer on Stackoverflow
Solution 7 - .NetHazem AbdelwahabView Answer on Stackoverflow
Solution 8 - .NetLars TruijensView Answer on Stackoverflow
Solution 9 - .NetTangiestView Answer on Stackoverflow
Solution 10 - .NetMaxView Answer on Stackoverflow
Solution 11 - .NetBoloView Answer on Stackoverflow
Solution 12 - .NettsadigovView Answer on Stackoverflow
Solution 13 - .NetPhil KermeenView Answer on Stackoverflow
Solution 14 - .NetWyatt BarnettView Answer on Stackoverflow
Solution 15 - .NetScott Shaw-SmithView Answer on Stackoverflow