TagGAC

GAC (Global Assembly Cache)

You can locate GAC folder inside Windows directory. GAC folder contains only strongly named assemblies. All applications that are running on your machine can access GAC folder and use its assemblies. Benefits of storing strongly named assemblies inside GAC are:

  • There is no need to distribute that particular assembly with every new version of application
  • Assemblies stored in GAC folder are strongly named so you need not to worry about having two or more version of same assembly distributed.

How can i locate GAC folder?

There are actually two locations:

  1. Location for assemblies created with .Net Framework 2.0 to .Net Framework 3.5
  2. Location for assemblies created with .Net Framework 4.0 and newer

Usually you cal locate it by typing C:\Windows\assembly for older strongly named assemblies or C:\Windows\Microsoft.NET\assembly for newer strongly named assemblies.

If your machine is not installed on C drive or your windows folder is not named Windows simply type in File explorer : %WINDIR%\Assembly or %WINDIR%\Microsoft.NET\assembly and you there you can find GAC folder.

How to install Strongly named assembly inside Global Assembly Cache?

Add new Class library project to Solution and name it AssemblyToInstall and strong name it.

Drag and drop approach:

Just simple locate bin\Debug folder inside AssemblyToInstall project, locate AssemblyToInstall.dll file and drop it to appropriate location (C:\Windows\Microsoft.NET\assembly). Note that you can do this only if your user has elevated privileges.

Using GacUtil.exe

If you are using Visual Studio 2013 or 2015 version, you can search for Developer Command Prompt and run it as Administrator.

New console will open.

Navigate to project. Mine is located on D drive under charp folder

Next you will need to run gacutil toll with -i parameter (basically -i switch is telling gacutil that we want to install assembly) followed by Assembly dll we want to install.

run command: gacutil.exe -i AssemblyToInstall.dll

GAC

How to use gacutil to install strongly named assembly inside GAC folder

You should receive message: “Assembly successfully added to the cache”

If you receive message: “Failure adding assembly to the cache: Attempt to install an assembly without a strong name”. That means that you have not signed assembly.

Now navigate to %WINDIR%\Microsoft.NET\assembly\GAC_MSIL\AssemblyToInstall and there you can see your assembly and can use that path to provide reference to that assembly to all applications located on this machine.

Tomorrow we will continue with topic on how to implement side-by-side hosting.

Strongly named assemblies

Purpose of strong naming assemblies is to create unique identity for desired assembly. You would typically want to do that when you need multiple versions of same assembly to be used, when assembly must be installed inside GAC (global assembly cache) or when you want assemblies to be to be referenced by strongly named assemblies.

What does it mean to be strongly named?

Strongly named assemblies are assemblies that have:

Name (usually name of project)

AssemblyVersion (AssemblyVersion information)

Culture information (Assemblies are usually culture neutral but if you wish to change them you can access AssemblyInfo.cs file and change AssemblyCulture attribute)

Private/Public key token (main difference between strongly named assemblies and weakly named assemblies)

I wish to create strongly named assemblies! What do i do?

First you would create a project. That first step would create weakly named assembly. Next what you want to do is sign it. There are multiple ways to achieve this.

First Approach:

From Visual studio:

  1. Right click project
  2. Properties
  3. Select Signing tab
  4. Check “Sign the assembly” CheckBox
  5. From Drop-down control select New
  6. Input necessary Information
  7. Select Drop-down control again and find your  .pfx file

Strongly named assemblies

How to strongly name assemblies

Now when we know how to strong name assemblies we can continue to part on how to put an assembly in the global assembly cache.

 

 

© 2021 LearnC#WithDarko

Theme by Anders NorenUp ↑