示例#1
0
        /// <summary>
        /// 分析
        /// </summary>
        public void Analyze()
        {
            var up    = new AssemblyUpgrader();
            var types = up.GetConfig();

            RootConfig.ConfigTypes.Clear();
            RootConfig.ConfigTypes.AddRange(types.Values);
        }
示例#2
0
        static int Main(string[] args)
        {
            if (args.Length == 0)
            {
                Console.WriteLine("参数不正确");
                return(1);
            }
            var arg      = args[0].Split('|');
            var fileName = arg[0];

            if (!File.Exists(fileName))
            {
                Console.WriteLine($"文件{fileName}不存在或无法访问!");
                return(2);
            }
            var rootPath = arg[1];

            if (arg[2] == "1")
            {
                var asm = new AssemblyUpgrader
                {
                    FileName = fileName
                };
                if (!asm.Prepare())
                {
                    return(2);
                }
                asm.Analyze();
                asm.End();
                string json = JsonConvert.SerializeObject(asm.Config, Formatting.Indented);
                File.WriteAllText(Path.Combine(rootPath, Path.GetFileNameWithoutExtension(fileName) + ".json"), json);
                return(0);
            }
            var pf   = typeof(Program).Assembly.Location;
            var dir1 = Path.GetDirectoryName(pf);
            var dir2 = Path.Combine(Environment.GetEnvironmentVariable("TEMP"), "Agebull_AssemblyAnalyzer");

            IOHelper.CopyPath(dir1, dir2);
            var prog    = Path.Combine(dir2, Path.GetFileName(pf));
            var process = Process.Start(prog, $"{fileName}|{rootPath}|1");

            process.WaitForExit();
            Console.ReadKey();
            return(process.ExitCode);
        }
示例#3
0
        private Dictionary <string, ApiItem> CheckInterface(Type controler, ProjectConfig project)
        {
            Dictionary <string, ApiItem> items    = new Dictionary <string, ApiItem>();
            AssemblyUpgrader             upgrader = new AssemblyUpgrader
            {
                HelpXml = HelpXml
            };

            foreach (var method in controler.GetMethods())
            {
                var item = new ApiItem
                {
                    Name = method.Name
                };
                items.Add(method.Name, item);
                GetInfo(item, controler, method);
                foreach (var para in method.GetParameters())
                {
                    var up     = upgrader.GetConfig(para.ParameterType);
                    var entity = new EntityConfig
                    {
                        Name        = up.Name,
                        Caption     = up.Caption,
                        Description = up.Description,
                        IsClass     = true
                    };
                    foreach (var pro in up.Properties.Values)
                    {
                        entity.Properties.Add(new PropertyConfig
                        {
                            Name        = pro.Name,
                            Caption     = pro.Caption,
                            Description = pro.Description,
                            CsType      = pro.TypeName,
                            Parent      = entity
                        });
                    }
                    Solution.Entities.Add(entity);
                    item.CallArg = entity.Name;
                    break;
                }
                if (method.ReturnType == typeof(void))
                {
                    continue;
                }
                {
                    var up     = upgrader.GetConfig(method.ReturnType);
                    var entity = new EntityConfig
                    {
                        Name        = up.Name,
                        Caption     = up.Caption,
                        Description = up.Description,
                        IsClass     = true,
                        Parent      = project
                    };
                    project.Entities.Add(entity);
                    item.ResultArg = entity.Name;
                    foreach (var pro in up.Properties.Values)
                    {
                        entity.Properties.Add(new PropertyConfig
                        {
                            Name        = pro.Name,
                            Caption     = pro.Caption,
                            Description = pro.Description,
                            CsType      = pro.TypeName,
                            Parent      = entity
                        });
                    }
                }
            }
            return(items);
        }
示例#4
0
        private void CheckApiItem(Type controler, List <ApiItem> items)
        {
            AssemblyUpgrader upgrader = new AssemblyUpgrader
            {
                HelpXml = HelpXml
            };

            var project = new ProjectConfig
            {
                Name = controler.Name
            };

            GetInfo(project, controler);
            Solution.Projects.Add(project);
            var ctors = controler.GetConstructors();
            Dictionary <string, ApiItem> interfaces = new Dictionary <string, ApiItem>(StringComparer.OrdinalIgnoreCase);

            foreach (var method in ctors)
            {
                var p = method.GetParameters();
                if (p.Length != 1)
                {
                    continue;
                }
                interfaces = CheckInterface(p[0].ParameterType, project);
            }
            List <ApiItem> noItems = new List <ApiItem>();

            foreach (var method in controler.GetMethods())
            {
                var route = method.GetCustomAttribute <RouteAttribute>();
                if (route == null)
                {
                    continue;
                }
                var item = new ApiItem
                {
                    Name    = method.Name,
                    Org     = route.Template,
                    Project = project.Name
                };
                items.Add(item);
                project.ApiItems.Add(item);
                GetInfo(item, controler, method);
                var post = method.GetCustomAttribute <HttpPostAttribute>();
                if (post != null)
                {
                    item.Method = HttpMethod.POST;
                }
                else
                {
                    var getm = method.GetCustomAttribute <HttpGetAttribute>();
                    if (getm == null)
                    {
                        continue;
                    }
                }
                foreach (var para in method.GetParameters())
                {
                    var up     = upgrader.GetConfig(para.ParameterType);
                    var entity = new EntityConfig
                    {
                        Name        = up.Name,
                        Caption     = up.Caption,
                        Description = up.Description,
                        IsClass     = true
                    };
                    foreach (var pro in up.Properties.Values)
                    {
                        entity.Properties.Add(new PropertyConfig
                        {
                            Name        = pro.Name,
                            Caption     = pro.Caption,
                            Description = pro.Description,
                            CsType      = pro.TypeName,
                            Parent      = entity
                        });
                    }
                    Solution.Entities.Add(entity);
                    item.CallArg = entity.Name;
                    break;
                }
                if (interfaces.ContainsKey(method.Name))
                {
                    var m2 = interfaces[method.Name];
                    interfaces.Remove(method.Name);
                    item.ResultArg = m2.ResultArg;
                    continue;
                }
                noItems.Add(item);

                /*if (method.ReturnType == typeof(void))
                 *  continue;
                 * {
                 *  var up = upgrader.GetConfig(method.ReturnType);
                 *  var entity = new EntityConfig
                 *  {
                 *      Name = up.Name,
                 *      Caption = up.Caption,
                 *      Description = up.Description,
                 *      IsClass = true
                 *  };
                 *  foreach (var pro in up.Properties.Values)
                 *  {
                 *      entity.Properties.Add(new PropertyConfig
                 *      {
                 *          Name = pro.Name,
                 *          Caption = pro.Caption,
                 *          Description = pro.Description,
                 *          CsType = pro.TypeName
                 *      });
                 *  }
                 *  Solution.Entities.Add(entity);
                 *  item.ResultArg = entity.Name;
                 * }*/
            }
            if (noItems.Count == 1 && interfaces.Count == 1)
            {
                noItems[0].ResultArg = interfaces.Values.First().ResultArg;
            }
        }