I have inherited an application, that uses Microsoft Enterprise Library. The VS solution of the applications contains about 200 projects.
I have been restructuring the solution moving the projects around and removing obsolete ones. I need to tidy it up to make it ready for other developers.
The solution contains Microsoft Enterprise Library dlls of a specific version, however when I moved stuff around, I noticed that some projects do not reference these dlls but instead dlls from my GAC.
I need to make sure that the solution either do not depend on anything else installed (in GAC or otherwise) or document if it does, so the next person do not have a nasty surprise when pulling it from source control.
I tried to removed the Enterprise Library dlls from GAC. It is failed like this:
C:\WINDOWS\system32>gacutil /u Microsoft.Practices.EnterpriseLibrary.Common
Microsoft (R) .NET Global Assembly Cache Utility. Version 4.0.30319.0
Copyright (c) Microsoft Corporation. All rights reserved.
Assembly: Microsoft.Practices.EnterpriseLibrary.Common, Version=4.1.0.0, Culture=neutral, PublicKeyToken=e44a2bc38ed2c13c, processorArchitecture=MSIL
Unable to uninstall: assembly is required by one or more applications
Pending references:
SCHEME: <WINDOWS_INSTALLER> ID: <MSI> DESCRIPTION : <Windows Installer>
Number of assemblies uninstalled = 0
Number of failures = 0
This message makes me think that this dll is referenced by an application installed with Windows Installer (MSI).
My machine does not have Microsoft Enterprise Library as one of the items in the Control Panel / Programs and Features.
How do I find out which MSI-installed product installed the DLL in gac?
EDIT: not a dupe. The other question asks about a situation when the assembly is not shown in GAC by the process explorer, and KB is talking about a situation when an assembly cannot be deleted even if it is not referenced by anything. The process explorer part of that other question is irrelevant to me, as I do not expect the assembly to be loaded all the time. The kb response also does not help since I do not want to delete the assembly I want to find out what program installed that. That other question answers do not answer that (because that's not what was asked there), but luckily I got quality answers here.