Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 2
0
        ///// <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());
        }
Exemplo n.º 3
0
        /// <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;
        }
Exemplo n.º 4
0
        /// <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));
            }
        }