Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to reference assembly from GAC?

I have installed the strong named assembly TestReflection into the GAC (I am using .NET 4.0 and VS 2010).

Different versions of the TestReflection DLL are in GAC of .NET 4.0 (C:\WINDOWS\Microsoft.NET\assembly\GAC_32\TestReflection\), however, the assembly does not appear in the "Project" -> "Add reference" box of VS 2010.

How can I refer to my assembly deployed in GAC at design time from another project?

This page says that:

You cannot add references from the Global Assembly Cache (GAC), as it is strictly part of the run-time environment.

Referring to this statement, I would like to know how to make your project's DLL shared assembly for other consumers if it's the requirement?

like image 648
Learner Avatar asked Feb 17 '11 11:02

Learner


People also ask

How do I find out if assembly is registered in GAC?

To get information on the the assembly attributes (Version, Culture, PublicKeyToken), run the gacutil /l command which will return a list of all the assemblies in the GAC. You can also see the information associated with a particular assembly using the -l parameter.

Which assembly is stored in GAC?

The Global Assembly Cache (GAC) is a central repository for storing shared assemblies. The GAC allows multiple versions of the same assembly to be installed concurrently and also prevents different assembly vendors from overwriting each other's assemblies.


1 Answers

The dll's shown in the .Net tab of the "Add references" dialog are not actually the ones registered in the GAC. They are found by searching a few paths on your filesystem.

The paths being searched are located by Visual Studio by looking up the following registry entries:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NetFramework\{Version}\AssemblyFoldersEx\

There should be some keys added there already, so if you want your own dll to show up on the .Net tab, you can add it to one of the folders defined there. You could also add a new registry key pointing to a custom folder, which would only contain your own dll's.

The GAC is only meant for loading assemblies at runtime after your application has been deployed, so I don't think you should use it while developing. When you deploy your app, make sure to set "Copy local" to false on your reference so the dll won't be copied to the bin folder, and then install it into the GAC and it will be loaded from there instead.

like image 193
Peter Hansen Avatar answered Nov 04 '22 00:11

Peter Hansen