public IEnumerable <PackageManagerMessage> UninstallPackage(IPackage package) { List <IModule> modules = new List <IModule>(); IEnumerable <IPackageFile> files = package.GetLibFiles().Where(x => x.TargetFramework == null || x.TargetFramework == mPackageManager.TargetFramework); foreach (IPackageFile file in files) { string assemblyName = Path.GetFileNameWithoutExtension(file.EffectivePath); IEnumerable <IModule> candidates = mModuleProvider.GetModules().Where(x => x.GetType().Assembly.GetName().Name == assemblyName); modules.AddRange(candidates); } foreach (IModule module in modules) { module.Remove(); } mModuleStatusManager.RemoveEntriesForModules(modules); mModuleDataVersionManager.RemoveEntriesForModules(modules); IEnumerable <PackageManagerMessage> messages = mPackageManager.UninstallPackage(package); if (!messages.Any(x => x.Level == MessageLevel.Error)) { RestartApplication(); } return(messages); }