Global Assembly Cache

Global assembly Cache(GAC), used to store the DLLS, uses strong name fundamentals which includes version, keycode etc.

Shared Location

Assemblies that should be used by all applications can be put in the global assembly cache. For example, if all applications should use an assembly located in the global assembly cache, a version policy statement can be added to the Machine.config file that redirects references to the assembly.

File Security

Administrators often protect the WINNT directory using an Access Control List (ACL) to control write and execute access. Because the global assembly cache resides in the WINNT directory, it inherits that directory's ACL. It is recommended that only users with Administrator privileges be allowed to delete files from the global assembly cache.

Side-by-Side Versioning

Multiple copies of assemblies with the same name but different version information can be maintained in the global assembly cache.

Additional Search Location

The CLR checks the GAC for an assembly that matches the assembly request before probing or using the codebase information in the configuration file.

The GAC as a construct does not actually exist within the Windows OS. It is implemented and managed by the .NET Framework. The folder within %systemroot% named assembly contains all globally-available assemblies with mangled filenames so that the version and public key tokens can be included. Each version can therefore exist within the same location and be called without requiring subsequent versions to preserve code entry point locations as usual. Explorer allows the drag-and-drop installation of assemblies into this folder only if they would otherwise be permitted to be installed from the command line.

A calling application may specify specific versions of an assembly when referencing them, so the CLR can simply refer to the filename to use the correct one.