Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Path of DLL installed to the GAC

Tags:

c#

file

dll

gac

How can I get the (physical) installed path of a DLL that is (may be) registered in GAC? This DLL is a control that may be hosted in things other than a .Net app (including IDEs other than VS...).

When I use System.Reflection.Assembly.GetExecutingAssembly().Location, it gives path of GAC folder in winnt\system32 - or in Design mode in VS gives the path to the VS IDE.

I need to get the path where physical dll is actually installed - or the bin/debug or (release) folder for VS.

Reason is that there is an XML file I need to get at in this folder, with config setting that are used both in design mode and at runtime.

Or how is it best to handle this scenario? I have a dubious network location I am using for design mode at the moment... (Don't think that ApplicationData folder is going to cut it (but have the .Net version soved as that's installed via ClickOnce ans can use the Clickonce Data folder) )

like image 262
kpollock Avatar asked Dec 18 '08 11:12

kpollock


People also ask

How do I find dll in GAC?

If you go to one of the assembly folders in the Windows directory, then type a dll name you're looking for in the search bar (of file explorer), they should start showing up.

Where is GAC installed?

NET framework which can be used to add and remove application components to/from the GAC. The Gacutil.exe tool is located in the . NET Framework installation directory. The default location for this is C:\Program Files (x86)\Microsoft SDKs\Windows\v10.

How do I check if a dll is registered in GAC?

You can actually navigate to the GAC via explorer or the command line and view the contents of the folder. It's location is C:\Windows\assembly. When viewing via explorer the actual files are hidden and abstracted away, if you need to copy or extract specific versions of the dlls the command line is the way to go.


1 Answers

If something gets put in the GAC, it actually gets copied into a spot under %WINDIR%\assembly, like

C:\WINDOWS\assembly\GAC_32\System.Data\2.0.0.0__b77a5c561934e089\System.Data.dll 

I assume you're seeing something like that when you check the Location of the assembly in question when it's installed in the GAC. That's actually correct. (In .NET 1.1 there was a "Codebase" listed when you looked at a GAC assembly's properties, but that was only to show you where the original file was located when you ran gacutil - it didn't actually indicate what would be loaded.) You can read more about that here.

Long story short, you may not be able to do what you want to do. Instead of looking in relation to some assembly that's being loaded (Assembly.GetExecutingAssembly()), you might want to switch the behavior to look relative to the primary application assembly (Assembly.GetEntryAssembly()) or put the file in some well-known location, possibly based on an environment variable that gets set.

like image 94
Travis Illig Avatar answered Oct 14 '22 17:10

Travis Illig