/// <summary> /// 加载插件 /// </summary> /// <param name="path"></param> private void loadCSharpPlugin(string path) { string name = Path.GetFileName(path); if (!File.Exists(path)) { Log.Write("加载插件", name, "失败, 原因 --> ", "插件路劲下不存在该插件!"); return; } try { Assembly assembly = Assembly.LoadFrom(path); Plugin plugin = new Plugin(); plugin.PluginInstance = Activator.CreateInstance( assembly.GetExportedTypes().Where(p => p.GetCustomAttribute <ExportAttribute>() != null).First() ) as IPlugBaseInterface; if (plugin is null) { Log.Write("加载插件", name, "失败, 原因 --> ", "插件未提供有效的接口!"); return; } PlugInfo plugInfo = new PlugInfo(); FileInfo info = new FileInfo(path); plugin.PlugInfo = plugInfo; plugInfo.Name = plugin.PluginInstance.Name; plugInfo.LocalURL = path; plugInfo.RemoteURL = ""; plugInfo.IsInstall = true; plugInfo.Size = info.Length.ToString(); plugInfo.Version = assembly.ImageRuntimeVersion; plugInfo.DateTime = info.LastWriteTime; plugInfo.Author = ""; string id = EncryptWithMD5(name); if (!PluginsContainer.ContainsKey(id)) { PluginsContainer.Add(id, plugin); } else { Log.Write("加载插件", name, "失败, 原因 --> 插件已经加载,重复加载!"); return; } } catch (Exception ex) { Log.Write("加载插件", name, "失败, 原因 --> ", ex.Message, "或者导出插件接口没有添加特性ExportAttribute"); } }