/// <summary> /// Загрузить спецификации плагинов /// </summary> private void LoadPlugins() { PluginSpecs = new List <PluginSpec>(); HashSet <string> procFileNames = new HashSet <string>(); foreach (string fileName in WebSettings.PluginFileNames) { if (!procFileNames.Contains(fileName)) { string errMsg; PluginSpec pluginSpec = PluginSpec.CreateFromDll(AppDirs.BinDir + fileName, out errMsg); if (pluginSpec == null) { Log.WriteError(errMsg); } else { PluginSpecs.Add(pluginSpec); } procFileNames.Add(fileName); } } }
/// <summary> /// Загрузить компоненты из файлов /// </summary> public void LoadCompFromFiles() { try { lock (syncLock) { log.WriteAction(Localization.UseRussian ? "Загрузка компонентов из файлов" : "Load components from files"); ClearDicts(); AttrTranslator attrTranslator = new AttrTranslator(); DirectoryInfo dirInfo = new DirectoryInfo(appDirs.BinDir); FileInfo[] fileInfoArr = dirInfo.GetFiles(CompLibMask, SearchOption.TopDirectoryOnly); foreach (FileInfo fileInfo in fileInfoArr) { string fileName = fileInfo.FullName; PluginSpec pluginSpec = PluginSpec.CreateFromDll(fileName, out string errMsg); if (pluginSpec == null) { log.WriteError(errMsg); } else if (pluginSpec is ISchemeComp) { pluginSpec.AppDirs = appDirs; pluginSpec.Log = log; pluginSpec.Init(); if (AddComponents((ISchemeComp)pluginSpec, attrTranslator)) { log.WriteAction(string.Format(Localization.UseRussian ? "Загружены компоненты из файла {0}" : "Components are loaded from the file {0}", fileName)); } else { log.WriteAction(string.Format(Localization.UseRussian ? "Не удалось загрузить компоненты из файла {0}" : "Unable to load components from the file {0}", fileName)); } } else { log.WriteError(string.Format(Localization.UseRussian ? "Библиотека {0} не предоставляет компоненты схем" : "The assembly {0} does not provide scheme components", fileName)); } } } } catch (Exception ex) { log.WriteException(ex, Localization.UseRussian ? "Ошибка при загрузке компонентов из файлов" : "Error loading components from files"); } }
private UserData userData; // данные пользователя приложения /// <summary> /// Получить все доступные плагины /// </summary> private List <PluginItem> GetAllPlugins() { List <PluginItem> pluginItems = new List <PluginItem>(); HashSet <string> existingFileNames = GetExistingFileNames(); HashSet <string> settingsFileNames = GetSettingsFileNames(); HashSet <string> allFileNames = new HashSet <string>(); allFileNames.UnionWith(existingFileNames); allFileNames.UnionWith(settingsFileNames); Dictionary <string, PluginItem> activePlugins = GetActivePlugins(); foreach (string fileName in allFileNames) { PluginItem pluginItem; if (activePlugins.TryGetValue(fileName, out pluginItem)) { // добавление активного плагина pluginItems.Add(pluginItem); } else if (settingsFileNames.Contains(fileName)) { // добавление активного, но не загруженного плагина pluginItems.Add(new PluginItem(fileName, "", "", fileName, PlaginStates.NotLoaded)); } else { // загрузка спецификации неактивного плагина string errMsg; PluginSpec pluginSpec = PluginSpec.CreateFromDll(appData.AppDirs.BinDir + fileName, out errMsg); if (pluginSpec == null) { appData.Log.WriteError(errMsg); } else { pluginItems.Add(new PluginItem(pluginSpec, PlaginStates.Inactive)); } } } pluginItems.Sort(); return(pluginItems); }