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:
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?
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.
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:
WINDOWS\assembly\GACLock.dat
, etc.)HKLM\SOFTWARE\Microsoft\Fusion\GACChangeNotification\...
)HKLM\SOFTWARE\Microsoft\Fusion\NativeImagesIndex...
)The wrapper in System.EnterpriseServices
is very similar to this old blog post and should work just fine.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With