Udostępnij za pośrednictwem


Top 2 things you should know about the Global Assembly Cache (GAC) in .NET 4.0

The Global Assembly Cache underwent a few changes in .NET 4.0. On your first few days with .NET 4.0 you'll most likely encounter a few scenarios which work differently than they did in the previous versions of .NET Framework.

1) You use gacutil.exe to install a .NET 4.0 assembly to the GAC but cannot find the assembly in the GAC when you look under 'c:\<windows folder>\assembly' using Windows Explorer

In .NET 4.0 the GAC Location has changed, The .NET 4.0 GAC is now located under 'c:\<windows folder>\Microsoft.NET\assembly'. Previous versions of .NET Framework will continue to use 'c:\<windows folder>\assembly'. If you install a .NET 4.0 assembly into the GAC using gacutil.exe it will go under the new location.

2) You copied gacutil.exe supplied with .NET 4.0 SDK to a different location but it doesn't work as expected. gacutil.exe doesn't seem to install your assembly in the GAC only when run from this custom location, you've even checked the new .NET 4.0 GAC location.

gacutil.exe starting .NET 4.0 has a dependency gacutlrc.dll which you can find in the subfolder 1033 where gacutil.exe is located. You need to copy this assembly as well to your gacutil.exe location.

Copying gacutil.exe to your installer location, etc is discouraged. Aaron's got a nice blog post describing why this is bad.

Comments

  • Anonymous
    June 06, 2010
    Thanks for the post! The second point helped me!

  • Anonymous
    July 29, 2010
    Windows explorer does not display the assemblies in the .net 4.0 folder the same way it did for .net 2.0 How do we view a list of all assemblies without using gacutil for .net framework 4.0 ?

  • Anonymous
    September 05, 2012
    In regards to #2, in my experience, you also need the gacutil.exe.config to run gacutil on a machine without the SDK installed.

  • Anonymous
    October 30, 2014
    Thanks a lot. Second thing helped me too