Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Methods to programmatically install a .NET assembly into the GAC

I need to create a small app or script to install a .NET assembly into the GAC. I've read there are a couple ways to do this including:

  • using gacutil.exe
  • executing the following line of code:

    new System.EnterpriseServices.Internal.Publish().GACInstall("Foo.dll");

However, what would happen if I just created the appropriate directories on the machine and copied the assembly into that directory? The structure of the GAC directory is the following: C:\Windows\assembly\GAC_MSIL\Foo\<version#>__<public token>\Foo.dll

Do the above two methods do anything special besides creating the folder structure and placing the assembly into it?

like image 825
Ken Avatar asked Sep 22 '09 15:09

Ken


People also ask

Which command is used to add the assembly to GAC?

You can use the . NET Global Assembly Cache utility (gacutil.exe) to add assemblies to the global assembly cache and to view the contents of the global assembly cache.


2 Answers

I strongly recommend using existing methods (like the ones you mentioned) because they are both supported and maintained by Microsoft and will continue to work with future releases.

A quick look at gacutil.exe with Process Monitor reveals that there is a little bit more to it than just copying files:

  • concurrency concerns (e.g. temporary files, locking WINDOWS\assembly\GACLock.dat, etc.)
  • notifications (e.g. HKLM\SOFTWARE\Microsoft\Fusion\GACChangeNotification\...)
  • indexing (e.g. HKLM\SOFTWARE\Microsoft\Fusion\NativeImagesIndex...)
  • validation (e.g. strong name, ...)

The wrapper in System.EnterpriseServices is very similar to this old blog post and should work just fine.

like image 148
Josef Pfleger Avatar answered Sep 21 '22 05:09

Josef Pfleger


We recently had to do this for 10s of servers in an enterprise environment. We used Wix to build a very simple MSI (seriously - 5 minutes work) and published to all server (and dev boxes) through Group Policy.

like image 40
Jason Irwin Avatar answered Sep 21 '22 05:09

Jason Irwin