void LoadLibraries(AssemblyResolver resolver, Hashtable visited, IEnumerable libraries) { // Convert all assembly names to assembly paths before registering the libraries. // The registry and the library cache will only handle full paths. foreach (string s in libraries) { string sr = resolver.Resolve(s, null); if (sr != null) { AddLibrary(resolver, visited, sr); } } Registry.ReloadWidgetLibraries(); }
public bool UpdateLibraries(ArrayList libraries, ArrayList projects, bool allowBackendRestart, bool forceUnload) { try { Registry.BeginChangeSet(); libraries.Add(Registry.CoreWidgetLibrary.Name); // Notify libraries that need to be unloaded and loaded again foreach (WidgetLibrary lib in Registry.RegisteredWidgetLibraries) { if (lib.NeedsReload) { appFrontend.NotifyLibraryUnloaded(lib.Name); } } if (!Registry.ReloadWidgetLibraries() && allowBackendRestart) { return(false); } // Store a list of registered libraries, used later to know which // ones need to be unloaded ArrayList loaded = new ArrayList(); foreach (WidgetLibrary alib in Registry.RegisteredWidgetLibraries) { loaded.Add(alib.Name); } // Load required libraries Hashtable visited = new Hashtable(); LoadLibraries(new AssemblyResolver(this), visited, libraries); foreach (ProjectBackend project in projects) { LoadLibraries(project.Resolver, visited, project.WidgetLibraries); } // Unload libraries which are not required foreach (string name in loaded) { if (!visited.Contains(name)) { if (forceUnload && allowBackendRestart) { return(false); } appFrontend.NotifyLibraryUnloaded(name); Registry.UnregisterWidgetLibrary(Registry.GetWidgetLibrary(name)); } } return(true); } finally { Registry.EndChangeSet(); } }