Wednesday, February 13, 2008

.NET Assembly uninstall problem

Have you ever encountered this error when you try to uninstall a .NET assembly?

Unable to uninstall: assembly is required by one or more applications Pending references:

Most probably yes!

Cause:

It is because that assembly is installed by an installer (anyone.. including standard .net MSI) . Installer specifies a traced reference count on the assembly being installed so when you try to delete assembly using GACUTIL, you get above error. I couldn’t uninstall some assembly while I was manually uninstalling a software.

Work Around:

Method 1:

Use GACBrowser software to remove such assembly (uses 3rd approach specified below). It’s Easy, search and select assembly to remove. And removed!!

Download from here: http://sourceforge.net/project/showfiles.php?group_id=214315

GAC Browser is powerful tool to search and remove assembly. It is must have tool for any developer dealing with assemblies. On an average, if you have visual studio 2005 installed on your PC, you may see more than 1000 assemblies on you PC. There is no good way of searching assembly in you GAC unless you have GAC Browser with you. Also visibility in GAC is increased with more info like when it was last GACed. Double click any assembly to de-assemble the assembly in ILDASM. All in one! That’s why I said it a “must have”!

Method 2:

Windows maintains trace reference count in registry at two places.

[HKCU\Software\Microsoft\Installer\Assemblies\Global]

[HKLM\SOFTWARE\Classes\Installer\Assemblies\Global]

So you may want to go to this registry and remove the entry of the assembly that you want to uninstall. Use GACUTIL to remove assembly from GAC.


Method 3:

Go to Assembly folder using command prompt.
1. Open CMD
2. Go to assembly directory (for most of us: C:\Windows\assembly), If you type ‘DIR’, you may find different folders (important are: GAC, GAC_MSIL, GAC_32)
3. Search your assembly folder from this folder, go to appropriate version folder and remove the folder.


Conclusion:

You may want to have GAC Browser software as well has use method 2 for clean operation. GAC browser is soon coming up with in build method 2.

2 comments:

efrain steinbach said...

method 1 doesn't always work in this case, neither does method 2. and method 3 is reckless, it may screw up your GAC and installations.

typically, when you get this error, the problem is that the assembly was installed by an installer, which is blocking the assembly although the program is not running. there is exactly ONE clean way to remove those assemblies from the GAC: uninstall the program through the Control Panel->Programs and Features menu.

i'd suggest you only start tampering with the registry if this does not work.

Yogee said...

efrain,
Don't misguide people by arbitrary saying "it doesn't work". Method 1 does the same thing internally as mentioned in Method 3. So it works unless you don't have permission to delete from assembly folder.

You can mention the error you are getting then we can discuss it.