/// <summary>加载插件</summary> /// <param name="typeName"></param> /// <param name="disname"></param> /// <param name="dll"></param> /// <param name="linkName"></param> /// <param name="url"></param> /// <returns></returns> public static Type LoadPlugin(String typeName, String disname, String dll, String linkName, String url) { var type = typeName.GetTypeEx(true); if (type != null) { return(type); } if (dll.IsNullOrEmpty()) { return(null); } // 先检查当前目录,再检查插件目录 var file = dll.GetFullPath(); if (!File.Exists(file) && Runtime.IsWeb) { file = "Bin".GetFullPath().CombinePath(dll); } if (!File.Exists(file)) { file = Setting.Current.GetPluginPath().CombinePath(dll); } // 如果本地没有数据库,则从网络下载 if (!File.Exists(file)) { XTrace.WriteLine("{0}不存在或平台版本不正确,准备联网获取 {1}", disname ?? dll, url); var client = new WebClientX(true, true); client.Log = XTrace.Log; var dir = Path.GetDirectoryName(file); var file2 = client.DownloadLinkAndExtract(url, linkName, dir); } if (!File.Exists(file)) { XTrace.WriteLine("未找到 {0} {1}", disname, dll); return(null); } type = typeName.GetTypeEx(true); if (type != null) { return(type); } //var assembly = Assembly.LoadFrom(file); //if (assembly == null) return null; //type = assembly.GetType(typeName); //if (type == null) type = AssemblyX.Create(assembly).GetType(typeName); return(type); }
///// <summary>自动扫描控制器,并添加到菜单</summary> ///// <remarks>默认操作当前注册区域的下一级Controllers命名空间</remarks> //protected override void ScanController() //{ // base.ScanController(); // var menu = ManageProvider.Menu.Root.FindByPath(AreaName); // if (menu != null && menu.DisplayName.IsNullOrEmpty()) // { // menu.DisplayName = "管理平台"; // menu.Save(); // } //} void CheckContent() { var cube = "~/Content/Cube.js".GetFullPath(); if (File.Exists(cube)) return; var url = Setting.Current.PluginServer; if (url.IsNullOrEmpty()) return; var wc = new WebClientX(true, true); wc.Log = XTrace.Log; wc.DownloadLinkAndExtract(url, "Cube_Content", "~/Content".GetFullPath()); }
/// <summary>加载插件</summary> /// <param name="typeName"></param> /// <param name="disname"></param> /// <param name="dll"></param> /// <param name="linkName"></param> /// <param name="url"></param> /// <returns></returns> public static Type LoadPlugin(String typeName, String disname, String dll, String linkName, String url) { var type = typeName.GetTypeEx(true); if (type != null) return type; if (dll.IsNullOrEmpty()) return null; // 先检查当前目录,再检查插件目录 var file = dll.GetFullPath(); if (!File.Exists(file) && Runtime.IsWeb) file = "Bin".GetFullPath().CombinePath(dll); if (!File.Exists(file)) file = Setting.Current.GetPluginPath().CombinePath(dll); // 如果本地没有数据库,则从网络下载 if (!File.Exists(file)) { XTrace.WriteLine("{0}不存在或平台版本不正确,准备联网获取 {1}", disname ?? dll, url); var client = new WebClientX(true, true); client.Log = XTrace.Log; var dir = Path.GetDirectoryName(file); var file2 = client.DownloadLinkAndExtract(url, linkName, dir); } if (!File.Exists(file)) { XTrace.WriteLine("未找到 {0} {1}", disname, dll); return null; } type = typeName.GetTypeEx(true); if (type != null) return type; //var assembly = Assembly.LoadFrom(file); //if (assembly == null) return null; //type = assembly.GetType(typeName); //if (type == null) type = AssemblyX.Create(assembly).GetType(typeName); return type; }
/// <summary>加载插件</summary> /// <param name="typeName"></param> /// <param name="disname"></param> /// <param name="dll"></param> /// <param name="linkName"></param> /// <param name="urls">提供下载地址的多个目标页面</param> /// <returns></returns> public static Type LoadPlugin(String typeName, String disname, String dll, String linkName, String urls = null) { var type = typeName.GetTypeEx(true); if (type != null) { return(type); } if (dll.IsNullOrEmpty()) { return(null); } lock (typeName) { var set = Setting.Current; var file = ""; if (!dll.IsNullOrEmpty()) { // 先检查当前目录,再检查插件目录 file = dll.GetFullPath(); if (!File.Exists(file) && Runtime.IsWeb) { file = "Bin".GetFullPath().CombinePath(dll); } if (!File.Exists(file)) { file = set.PluginPath.GetFullPath().CombinePath(dll); } if (!File.Exists(file)) { file = set.PluginPath.GetBasePath().CombinePath(dll); } } if (urls.IsNullOrEmpty()) { urls = set.PluginServer; } // 如果本地没有数据库,则从网络下载 if (!File.Exists(file)) { XTrace.WriteLine("{0}不存在或平台版本不正确,准备联网获取 {1}", disname ?? dll, urls); var client = new WebClientX() { Log = XTrace.Log }; var dir = Path.GetDirectoryName(file); var file2 = client.DownloadLinkAndExtract(urls, linkName, dir); client.TryDispose(); } if (!File.Exists(file)) { XTrace.WriteLine("未找到 {0} {1}", disname, dll); return(null); } //return Assembly.LoadFrom(file).GetType(typeName); return(typeName.GetTypeEx(true)); } }