/// <summary> /// 分析 /// </summary> public void Analyze() { var up = new AssemblyUpgrader(); var types = up.GetConfig(); RootConfig.ConfigTypes.Clear(); RootConfig.ConfigTypes.AddRange(types.Values); }
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); }
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); }
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; } }