public static Dictionary <string, ModulePlugin> PluginDic;//本地插件 /// <summary> /// 加载所有插件 /// </summary> public static void LoadAllPlugin() { PluginDic = new Dictionary <string, ModulePlugin>(); List <string> pflist = PluginSysManage.GetAllPluginFile(); for (int i = 0; i < pflist.Count; i++) { //AddPlugin(pflist[i]); string filepath = AppGlobal.AppRootPath + pflist[i];//转为绝对路径 ModulePlugin mp = new ModulePlugin(); mp.appType = AppGlobal.appType; mp.LoadPlugin(filepath); mp.LoadAttribute(filepath); PluginDic.Add(mp.plugin.name, mp); } }
/// <summary> /// 加载插件,创建AppDomain来动态加载或卸载dll /// </summary> /// <param name="plugfile"></param> public static void AddPlugin(string plugfile) { if (PluginDic == null) { PluginDic = new Dictionary <string, ModulePlugin>(); } if (DomainDic == null) { DomainDic = new Dictionary <string, AppDomain>(); } if (IsOpenDomain)//开启程序域 { //AppDomainSetup setup = new AppDomainSetup(); //setup.ApplicationName = "ApplicationLoader"; //setup.ApplicationBase = AppDomain.CurrentDomain.BaseDirectory; //setup.PrivateBinPath = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "private"); //setup.CachePath = setup.ApplicationBase; //setup.ShadowCopyFiles = "true"; //setup.ShadowCopyDirectories = setup.ApplicationBase; //AppDomain.CurrentDomain.SetShadowCopyFiles(); //AppDomain appDomain = AppDomain.CreateDomain("ApplicationLoaderDomain", null, setup); //String name = Assembly.GetExecutingAssembly().GetName().FullName; //ModulePlugin mp = (ModulePlugin)appDomain.CreateInstanceAndUnwrap(name, typeof(ModulePlugin).FullName); //mp.appType = AppGlobal.appType; //mp.LoadPlugin(plugfile); //if (PluginDic.ContainsKey(mp.plugin.name) == false) //{ // PluginDic.Add(mp.plugin.name, mp); // DomainDic.Add(mp.plugin.name, appDomain); // mp.LoadAttribute(plugfile); //} } else { ModulePlugin mp = new ModulePlugin(); mp.appType = AppGlobal.appType; mp.LoadPlugin(plugfile); if (PluginDic.ContainsKey(mp.plugin.name) == false) { PluginDic.Add(mp.plugin.name, mp); mp.LoadAttribute(plugfile); } } }