From c944bd3b0e8e9dc38311eacf126e024e7396f54b Mon Sep 17 00:00:00 2001 From: chenchun Date: Tue, 5 Nov 2024 18:50:15 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=90=AD=E5=BB=BAtool?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tool/Yi.Abp.Tool/CommandInvoker.cs | 45 ++++ .../tool/Yi.Abp.Tool/CommandSelector.cs | 117 --------- .../Yi.Abp.Tool/Commands/AddModuleCommand.cs | 242 +++++++++--------- .../tool/Yi.Abp.Tool/Commands/ClearCommand.cs | 100 ++++---- .../tool/Yi.Abp.Tool/Commands/CloneCommand.cs | 100 ++++---- .../tool/Yi.Abp.Tool/Commands/HelpCommand.cs | 80 +++--- .../tool/Yi.Abp.Tool/Commands/NewCommand.cs | 168 ++++++------ .../tool/Yi.Abp.Tool/Commands/TestCommand.cs | 20 ++ .../Yi.Abp.Tool/Commands/VersionCommand.cs | 28 +- Yi.Abp.Net8/tool/Yi.Abp.Tool/ICommand.cs | 15 +- Yi.Abp.Net8/tool/Yi.Abp.Tool/Program.cs | 7 +- 11 files changed, 433 insertions(+), 489 deletions(-) create mode 100644 Yi.Abp.Net8/tool/Yi.Abp.Tool/CommandInvoker.cs delete mode 100644 Yi.Abp.Net8/tool/Yi.Abp.Tool/CommandSelector.cs create mode 100644 Yi.Abp.Net8/tool/Yi.Abp.Tool/Commands/TestCommand.cs diff --git a/Yi.Abp.Net8/tool/Yi.Abp.Tool/CommandInvoker.cs b/Yi.Abp.Net8/tool/Yi.Abp.Tool/CommandInvoker.cs new file mode 100644 index 00000000..5972ad5f --- /dev/null +++ b/Yi.Abp.Net8/tool/Yi.Abp.Tool/CommandInvoker.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Microsoft.Extensions.CommandLineUtils; +using Volo.Abp.DependencyInjection; +using static System.Runtime.InteropServices.JavaScript.JSType; + +namespace Yi.Abp.Tool +{ + public class CommandInvoker : ISingletonDependency + { + private readonly IEnumerable _commands; + private CommandLineApplication Application { get; } + + public CommandInvoker(IEnumerable commands) + { + _commands = commands; + Application = new CommandLineApplication(); + InitCommand(); + } + + private void InitCommand() + { + Application.HelpOption("-h"); + + foreach (var command in _commands) + { + Application.Command(command.Command, con => command.CommandLineApplicationAsync(con).Wait()); + } + } + + public async Task InvokerAsync(string[] args) + { + //使用哪个命令,根据第一参数来判断,如果都不是,打印help + // foreach (var commandLineApplication in Application.Commands) + // { + // commandLineApplication.Execute(args); + // } + + Application.Execute(args); + } + } +} \ No newline at end of file diff --git a/Yi.Abp.Net8/tool/Yi.Abp.Tool/CommandSelector.cs b/Yi.Abp.Net8/tool/Yi.Abp.Tool/CommandSelector.cs deleted file mode 100644 index c116fcd2..00000000 --- a/Yi.Abp.Net8/tool/Yi.Abp.Tool/CommandSelector.cs +++ /dev/null @@ -1,117 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Microsoft.Extensions.CommandLineUtils; -using Volo.Abp.DependencyInjection; -using static System.Runtime.InteropServices.JavaScript.JSType; - -namespace Yi.Abp.Tool -{ - public class CommandSelector : ITransientDependency - { - private readonly IEnumerable _commands; - public CommandSelector(IEnumerable commands) - { - _commands = commands; - } - public async Task SelectorAsync(string[] args) - { - var app = new CommandLineApplication(); - - // //1-设置命令 - // app.Command(); - // //2-各自命令内,设置选项 - // app.Options(); - // //3-执行,暴露方法 - // app.Execute(args); - - // - // //不指定命令,默认给help - // if (args.Length == 0) - // { - // await SelectorDefaultCommandAsync(); - // return; - // } - // var app = new CommandLineApplication(); - // - // var commandStr = args[0]; - // - // var commandOrNull = _commands.Where(x => x.CommandStrs.Select(x => x.ToUpper()).Contains(commandStr.ToUpper())).FirstOrDefault(); - // - // //没有匹配到命令,,默认给help - // if (commandOrNull == null) - // { - // await SelectorDefaultCommandAsync(); - // return; - // } - // - // var command = commandOrNull; - // - // var options = new Dictionary(); - // - // //去除命令,剩下进行参数装载 - // string[] commonArgs = args.Skip(1).ToArray(); - // for (var i = 0; i < commonArgs.Length; i++) - // { - // var currentArg = commonArgs[i]; - // //命令参数以-或者--开头 - // if (IsCommandArg(currentArg)) - // { - // string? commonValue = null; - // //参数值在他的下一位 - // if (i + 1 < commonArgs.Length) - // { - // var nextArg = commonArgs[i + 1]; - // if (!IsCommandArg(nextArg)) - // { - // commonValue = nextArg; - // } - // - // } - // //删除-就是参数名 - // options.Add(ArgToCommandMap(currentArg), commonValue); - // } - // - // - // - // } - // await command.InvokerAsync(options,args); - - } - /// - /// 判断是否为命令参数 - /// - /// - private bool IsCommandArg(string arg) - { - if (arg.StartsWith("-") || arg.StartsWith("--")) - { - return true; - } - else - { - return false; - } - } - - /// - /// 参数到命令的转换 - /// - /// - private string ArgToCommandMap(string arg) - { - return arg.TrimStart('-').TrimStart('-'); - } - - /// - /// 选择默认命令 - /// - /// - private async Task SelectorDefaultCommandAsync() - { - await SelectorAsync(["-h", "-error"]); - } - } -} diff --git a/Yi.Abp.Net8/tool/Yi.Abp.Tool/Commands/AddModuleCommand.cs b/Yi.Abp.Net8/tool/Yi.Abp.Tool/Commands/AddModuleCommand.cs index 4e72b395..16c6d07f 100644 --- a/Yi.Abp.Net8/tool/Yi.Abp.Tool/Commands/AddModuleCommand.cs +++ b/Yi.Abp.Net8/tool/Yi.Abp.Tool/Commands/AddModuleCommand.cs @@ -1,121 +1,121 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Yi.Abp.Tool.Commands -{ - public class AddModuleCommand : ICommand - { - public List CommandStrs => new List { "add-module" }; - - public async Task InvokerAsync(Dictionary options, string[] args) - { - //只有一个add-module - if (args.Length <= 1) - { - throw new UserFriendlyException("命令错误,add-module命令后必须添加 模块名"); - } - - //需要添加名称 - var moduleName = args[1]; - options.TryGetValue("modulePath", out var modulePath); - - //模块路径默认按小写规则,当前路径 - if (string.IsNullOrEmpty(modulePath)) - { - modulePath = moduleName.ToLower().Replace(".", "-"); - } - - - //解决方案默认在模块文件夹上一级,也可以通过s进行指定 - var slnPath = string.Empty; - options.TryGetValue("s", out var slnPath1); - options.TryGetValue("solution", out var slnPath2); - slnPath = string.IsNullOrEmpty(slnPath1) ? slnPath2 : slnPath1; - if (string.IsNullOrEmpty(slnPath)) - { - slnPath = "../"; - } - - CheckFirstSlnPath(slnPath); - var dotnetSlnCommandPart1 = $"dotnet sln \"{slnPath}\" add \"{modulePath}\\{moduleName}."; - var dotnetSlnCommandPart2 = new List() { "Application", "Application.Contracts", "Domain", "Domain.Shared", "SqlSugarCore" }; - var paths = dotnetSlnCommandPart2.Select(x => $@"{modulePath}\{moduleName}." + x).ToArray(); - CheckPathExist(paths); - - var cmdCommands = dotnetSlnCommandPart2.Select(x => dotnetSlnCommandPart1 + x+"\"").ToArray(); - StartCmd(cmdCommands); - - await Console.Out.WriteLineAsync("恭喜~模块添加成功!"); - } - - /// - /// 获取一个sln解决方案,多个将报错 - /// - /// - private string CheckFirstSlnPath(string slnPath) - { - string[] slnFiles = Directory.GetFiles(slnPath, "*.sln"); - if (slnFiles.Length > 1) - { - throw new UserFriendlyException("当前目录包含多个sln解决方案,请只保留一个"); - } - if (slnFiles.Length == 0) - { - throw new UserFriendlyException("当前目录未找到sln解决方案,请检查"); - } - - return slnFiles[0]; - } - - - /// - /// 执行cmd命令 - /// - /// - private void StartCmd(params string[] cmdCommands) - { - ProcessStartInfo psi = new ProcessStartInfo - { - FileName = "cmd.exe", - Arguments = $"/c chcp 65001&{string.Join("&", cmdCommands)}", - RedirectStandardInput = true, - RedirectStandardOutput = true, - RedirectStandardError = true, - CreateNoWindow = true, - UseShellExecute = false - }; - - Process proc = new Process - { - StartInfo = psi - }; - - proc.Start(); - string output = proc.StandardOutput.ReadToEnd(); - Console.WriteLine(output); - - proc.WaitForExit(); - } - - - /// - /// 检查路径 - /// - /// - /// - private void CheckPathExist(string[] paths) - { - foreach (string path in paths) - { - if (!Directory.Exists(path)) - { - throw new UserFriendlyException($"路径错误,请检查你的路径,找不到:{path}"); - } - } - } - } -} +// using System; +// using System.Collections.Generic; +// using System.Diagnostics; +// using System.Linq; +// using System.Text; +// using System.Threading.Tasks; +// +// namespace Yi.Abp.Tool.Commands +// { +// public class AddModuleCommand : ICommand +// { +// public List CommandStrs => new List { "add-module" }; +// +// public async Task InvokerAsync(Dictionary options, string[] args) +// { +// //只有一个add-module +// if (args.Length <= 1) +// { +// throw new UserFriendlyException("命令错误,add-module命令后必须添加 模块名"); +// } +// +// //需要添加名称 +// var moduleName = args[1]; +// options.TryGetValue("modulePath", out var modulePath); +// +// //模块路径默认按小写规则,当前路径 +// if (string.IsNullOrEmpty(modulePath)) +// { +// modulePath = moduleName.ToLower().Replace(".", "-"); +// } +// +// +// //解决方案默认在模块文件夹上一级,也可以通过s进行指定 +// var slnPath = string.Empty; +// options.TryGetValue("s", out var slnPath1); +// options.TryGetValue("solution", out var slnPath2); +// slnPath = string.IsNullOrEmpty(slnPath1) ? slnPath2 : slnPath1; +// if (string.IsNullOrEmpty(slnPath)) +// { +// slnPath = "../"; +// } +// +// CheckFirstSlnPath(slnPath); +// var dotnetSlnCommandPart1 = $"dotnet sln \"{slnPath}\" add \"{modulePath}\\{moduleName}."; +// var dotnetSlnCommandPart2 = new List() { "Application", "Application.Contracts", "Domain", "Domain.Shared", "SqlSugarCore" }; +// var paths = dotnetSlnCommandPart2.Select(x => $@"{modulePath}\{moduleName}." + x).ToArray(); +// CheckPathExist(paths); +// +// var cmdCommands = dotnetSlnCommandPart2.Select(x => dotnetSlnCommandPart1 + x+"\"").ToArray(); +// StartCmd(cmdCommands); +// +// await Console.Out.WriteLineAsync("恭喜~模块添加成功!"); +// } +// +// /// +// /// 获取一个sln解决方案,多个将报错 +// /// +// /// +// private string CheckFirstSlnPath(string slnPath) +// { +// string[] slnFiles = Directory.GetFiles(slnPath, "*.sln"); +// if (slnFiles.Length > 1) +// { +// throw new UserFriendlyException("当前目录包含多个sln解决方案,请只保留一个"); +// } +// if (slnFiles.Length == 0) +// { +// throw new UserFriendlyException("当前目录未找到sln解决方案,请检查"); +// } +// +// return slnFiles[0]; +// } +// +// +// /// +// /// 执行cmd命令 +// /// +// /// +// private void StartCmd(params string[] cmdCommands) +// { +// ProcessStartInfo psi = new ProcessStartInfo +// { +// FileName = "cmd.exe", +// Arguments = $"/c chcp 65001&{string.Join("&", cmdCommands)}", +// RedirectStandardInput = true, +// RedirectStandardOutput = true, +// RedirectStandardError = true, +// CreateNoWindow = true, +// UseShellExecute = false +// }; +// +// Process proc = new Process +// { +// StartInfo = psi +// }; +// +// proc.Start(); +// string output = proc.StandardOutput.ReadToEnd(); +// Console.WriteLine(output); +// +// proc.WaitForExit(); +// } +// +// +// /// +// /// 检查路径 +// /// +// /// +// /// +// private void CheckPathExist(string[] paths) +// { +// foreach (string path in paths) +// { +// if (!Directory.Exists(path)) +// { +// throw new UserFriendlyException($"路径错误,请检查你的路径,找不到:{path}"); +// } +// } +// } +// } +// } diff --git a/Yi.Abp.Net8/tool/Yi.Abp.Tool/Commands/ClearCommand.cs b/Yi.Abp.Net8/tool/Yi.Abp.Tool/Commands/ClearCommand.cs index 052f1932..5bdc5a13 100644 --- a/Yi.Abp.Net8/tool/Yi.Abp.Tool/Commands/ClearCommand.cs +++ b/Yi.Abp.Net8/tool/Yi.Abp.Tool/Commands/ClearCommand.cs @@ -1,50 +1,50 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Yi.Abp.Tool.Commands -{ - public class ClearCommand : ICommand - { - public List CommandStrs => ["clear"]; - - public Task InvokerAsync(Dictionary options, string[] args) - { - List delDirBlacklist = ["obj", "bin"]; - options.TryGetValue("path", out var path); - - if (string.IsNullOrEmpty(path)) - { - path = "./"; - } - DeleteObjBinFolders(path, delDirBlacklist); - return Task.CompletedTask; - } - - - private static void DeleteObjBinFolders(string directory, List delDirBlacklist) - { - try - { - foreach (string subDir in Directory.GetDirectories(directory)) - { - if (delDirBlacklist.Contains(Path.GetFileName( subDir))) - { - Directory.Delete(subDir, true); - Console.WriteLine($"已删除文件夹:{subDir}"); - } - else - { - DeleteObjBinFolders(subDir, delDirBlacklist); - } - } - } - catch (Exception ex) - { - Console.WriteLine($"无法删除文件夹:{directory},错误信息: {ex.Message}"); - } - } - } -} +// using System; +// using System.Collections.Generic; +// using System.Linq; +// using System.Text; +// using System.Threading.Tasks; +// +// namespace Yi.Abp.Tool.Commands +// { +// public class ClearCommand : ICommand +// { +// public List CommandStrs => ["clear"]; +// +// public Task InvokerAsync(Dictionary options, string[] args) +// { +// List delDirBlacklist = ["obj", "bin"]; +// options.TryGetValue("path", out var path); +// +// if (string.IsNullOrEmpty(path)) +// { +// path = "./"; +// } +// DeleteObjBinFolders(path, delDirBlacklist); +// return Task.CompletedTask; +// } +// +// +// private static void DeleteObjBinFolders(string directory, List delDirBlacklist) +// { +// try +// { +// foreach (string subDir in Directory.GetDirectories(directory)) +// { +// if (delDirBlacklist.Contains(Path.GetFileName( subDir))) +// { +// Directory.Delete(subDir, true); +// Console.WriteLine($"已删除文件夹:{subDir}"); +// } +// else +// { +// DeleteObjBinFolders(subDir, delDirBlacklist); +// } +// } +// } +// catch (Exception ex) +// { +// Console.WriteLine($"无法删除文件夹:{directory},错误信息: {ex.Message}"); +// } +// } +// } +// } diff --git a/Yi.Abp.Net8/tool/Yi.Abp.Tool/Commands/CloneCommand.cs b/Yi.Abp.Net8/tool/Yi.Abp.Tool/Commands/CloneCommand.cs index 52d81dc0..900b0da0 100644 --- a/Yi.Abp.Net8/tool/Yi.Abp.Tool/Commands/CloneCommand.cs +++ b/Yi.Abp.Net8/tool/Yi.Abp.Tool/Commands/CloneCommand.cs @@ -1,50 +1,50 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Yi.Abp.Tool.Commands -{ - public class CloneCommand : ICommand - { - public List CommandStrs => new List { "clone"}; - - private const string cloneAddress= "https://gitee.com/ccnetcore/Yi"; - public Task InvokerAsync(Dictionary options, string[] args) - { - StartCmd($"git clone {cloneAddress}"); - return Task.CompletedTask; - } - - /// - /// 执行cmd命令 - /// - /// - private void StartCmd(params string[] cmdCommands) - { - ProcessStartInfo psi = new ProcessStartInfo - { - FileName = "cmd.exe", - Arguments = $"/c chcp 65001&{string.Join("&", cmdCommands)}", - RedirectStandardInput = true, - RedirectStandardOutput = true, - RedirectStandardError = true, - CreateNoWindow = true, - UseShellExecute = false - }; - - Process proc = new Process - { - StartInfo = psi - }; - - proc.Start(); - string output = proc.StandardOutput.ReadToEnd(); - Console.WriteLine(output); - - proc.WaitForExit(); - } - } -} +// using System; +// using System.Collections.Generic; +// using System.Diagnostics; +// using System.Linq; +// using System.Text; +// using System.Threading.Tasks; +// +// namespace Yi.Abp.Tool.Commands +// { +// public class CloneCommand : ICommand +// { +// public List CommandStrs => new List { "clone"}; +// +// private const string cloneAddress= "https://gitee.com/ccnetcore/Yi"; +// public Task InvokerAsync(Dictionary options, string[] args) +// { +// StartCmd($"git clone {cloneAddress}"); +// return Task.CompletedTask; +// } +// +// /// +// /// 执行cmd命令 +// /// +// /// +// private void StartCmd(params string[] cmdCommands) +// { +// ProcessStartInfo psi = new ProcessStartInfo +// { +// FileName = "cmd.exe", +// Arguments = $"/c chcp 65001&{string.Join("&", cmdCommands)}", +// RedirectStandardInput = true, +// RedirectStandardOutput = true, +// RedirectStandardError = true, +// CreateNoWindow = true, +// UseShellExecute = false +// }; +// +// Process proc = new Process +// { +// StartInfo = psi +// }; +// +// proc.Start(); +// string output = proc.StandardOutput.ReadToEnd(); +// Console.WriteLine(output); +// +// proc.WaitForExit(); +// } +// } +// } diff --git a/Yi.Abp.Net8/tool/Yi.Abp.Tool/Commands/HelpCommand.cs b/Yi.Abp.Net8/tool/Yi.Abp.Tool/Commands/HelpCommand.cs index d3917b84..a2460a85 100644 --- a/Yi.Abp.Net8/tool/Yi.Abp.Tool/Commands/HelpCommand.cs +++ b/Yi.Abp.Net8/tool/Yi.Abp.Tool/Commands/HelpCommand.cs @@ -1,40 +1,40 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Reflection; -using System.Text; -using System.Threading.Tasks; - -namespace Yi.Abp.Tool.Commands -{ - public class HelpCommand : ICommand - { - public List CommandStrs => new List { "h", "help", "-h", "-help" }; - - public Task InvokerAsync(Dictionary options, string[] args) - { - string? errorMsg = null; - if (options.TryGetValue("error", out _)) - { - errorMsg = "您输入的命令有误,请检查,以下帮助命令提示:"; - } - Console.WriteLine($""" - {errorMsg} - 使用: - - yi-abp [options] - - 命令列表: - - > v: 查看yi-abp工具版本号 - > help: 查看帮助列表,写下命令` yi-abp help ` - > new: 创建模块模板` yi-abp new -t module -csf ` - > new: 创建项目模板` yi-abp new -csf ` - > add-module: 将内容添加到当前解决方案` yi-abp add-module [-modulePath ] [-s ] ` - > clear: 清除当前目录及子目录下的obj、bin文件夹` yi-abp clear ` - - """); - return Task.CompletedTask; - } - } -} +// using System; +// using System.Collections.Generic; +// using System.Linq; +// using System.Reflection; +// using System.Text; +// using System.Threading.Tasks; +// +// namespace Yi.Abp.Tool.Commands +// { +// public class HelpCommand : ICommand +// { +// public List CommandStrs => new List { "h", "help", "-h", "-help" }; +// +// public Task InvokerAsync(Dictionary options, string[] args) +// { +// string? errorMsg = null; +// if (options.TryGetValue("error", out _)) +// { +// errorMsg = "您输入的命令有误,请检查,以下帮助命令提示:"; +// } +// Console.WriteLine($""" +// {errorMsg} +// 使用: +// +// yi-abp [options] +// +// 命令列表: +// +// > v: 查看yi-abp工具版本号 +// > help: 查看帮助列表,写下命令` yi-abp help ` +// > new: 创建模块模板` yi-abp new -t module -csf ` +// > new: 创建项目模板` yi-abp new -csf ` +// > add-module: 将内容添加到当前解决方案` yi-abp add-module [-modulePath ] [-s ] ` +// > clear: 清除当前目录及子目录下的obj、bin文件夹` yi-abp clear ` +// +// """); +// return Task.CompletedTask; +// } +// } +// } diff --git a/Yi.Abp.Net8/tool/Yi.Abp.Tool/Commands/NewCommand.cs b/Yi.Abp.Net8/tool/Yi.Abp.Tool/Commands/NewCommand.cs index 35d2eba1..4830a319 100644 --- a/Yi.Abp.Net8/tool/Yi.Abp.Tool/Commands/NewCommand.cs +++ b/Yi.Abp.Net8/tool/Yi.Abp.Tool/Commands/NewCommand.cs @@ -1,84 +1,84 @@ -using System; -using System.Collections.Generic; -using System.IO.Compression; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Mvc; -using Yi.Abp.Tool.Application.Contracts; -using Yi.Abp.Tool.Application.Contracts.Dtos; - -namespace Yi.Abp.Tool.Commands -{ - public class NewCommand : ICommand - { - private readonly ITemplateGenService _templateGenService; - public NewCommand(ITemplateGenService templateGenService) - { - _templateGenService = templateGenService; - } - - public List CommandStrs => new List() { "new" }; - - - public async Task InvokerAsync(Dictionary options, string[] args) - { - var id = Guid.NewGuid().ToString("N"); - //只有一个new - if (args.Length <= 1) - { - throw new UserFriendlyException("命令错误,new命令后必须添加 名称"); - } - string name = args[1]; - - #region 处理生成类型 - - options.TryGetValue("t", out var templateType); - var zipPath = string.Empty; - byte[] fileByteArray; - if (templateType == "module") - { - //代表模块生成 - fileByteArray = await _templateGenService.CreateModuleAsync(new TemplateGenCreateInputDto - { - Name = name, - }); - } - else - { - //代表模块生成 - fileByteArray = await _templateGenService.CreateProjectAsync(new TemplateGenCreateInputDto - { - Name = name, - }); - } - zipPath = $"{id}.zip"; - await File.WriteAllBytesAsync(zipPath, fileByteArray); - - #endregion - - #region 处理解决方案文件夹 - //默认是当前目录 - var unzipDirPath = "./"; - //如果创建解决方案文件夹 - if (options.TryGetValue("csf", out _)) - { - var moduleName = name.ToLower().Replace(".", "-"); - - if (Directory.Exists(moduleName)) - { - throw new UserFriendlyException($"文件夹[{moduleName}]已存在,请删除后重试"); - } - Directory.CreateDirectory(moduleName); - unzipDirPath = moduleName; - } - #endregion - ZipFile.ExtractToDirectory(zipPath, unzipDirPath); - //创建压缩包后删除临时目录 - File.Delete(zipPath); - - - await Console.Out.WriteLineAsync("恭喜~模块已生成!"); - } - } -} +// using System; +// using System.Collections.Generic; +// using System.IO.Compression; +// using System.Linq; +// using System.Text; +// using System.Threading.Tasks; +// using Microsoft.AspNetCore.Mvc; +// using Yi.Abp.Tool.Application.Contracts; +// using Yi.Abp.Tool.Application.Contracts.Dtos; +// +// namespace Yi.Abp.Tool.Commands +// { +// public class NewCommand : ICommand +// { +// private readonly ITemplateGenService _templateGenService; +// public NewCommand(ITemplateGenService templateGenService) +// { +// _templateGenService = templateGenService; +// } +// +// public List CommandStrs => new List() { "new" }; +// +// +// public async Task InvokerAsync(Dictionary options, string[] args) +// { +// var id = Guid.NewGuid().ToString("N"); +// //只有一个new +// if (args.Length <= 1) +// { +// throw new UserFriendlyException("命令错误,new命令后必须添加 名称"); +// } +// string name = args[1]; +// +// #region 处理生成类型 +// +// options.TryGetValue("t", out var templateType); +// var zipPath = string.Empty; +// byte[] fileByteArray; +// if (templateType == "module") +// { +// //代表模块生成 +// fileByteArray = await _templateGenService.CreateModuleAsync(new TemplateGenCreateInputDto +// { +// Name = name, +// }); +// } +// else +// { +// //代表模块生成 +// fileByteArray = await _templateGenService.CreateProjectAsync(new TemplateGenCreateInputDto +// { +// Name = name, +// }); +// } +// zipPath = $"{id}.zip"; +// await File.WriteAllBytesAsync(zipPath, fileByteArray); +// +// #endregion +// +// #region 处理解决方案文件夹 +// //默认是当前目录 +// var unzipDirPath = "./"; +// //如果创建解决方案文件夹 +// if (options.TryGetValue("csf", out _)) +// { +// var moduleName = name.ToLower().Replace(".", "-"); +// +// if (Directory.Exists(moduleName)) +// { +// throw new UserFriendlyException($"文件夹[{moduleName}]已存在,请删除后重试"); +// } +// Directory.CreateDirectory(moduleName); +// unzipDirPath = moduleName; +// } +// #endregion +// ZipFile.ExtractToDirectory(zipPath, unzipDirPath); +// //创建压缩包后删除临时目录 +// File.Delete(zipPath); +// +// +// await Console.Out.WriteLineAsync("恭喜~模块已生成!"); +// } +// } +// } diff --git a/Yi.Abp.Net8/tool/Yi.Abp.Tool/Commands/TestCommand.cs b/Yi.Abp.Net8/tool/Yi.Abp.Tool/Commands/TestCommand.cs new file mode 100644 index 00000000..d779295b --- /dev/null +++ b/Yi.Abp.Net8/tool/Yi.Abp.Tool/Commands/TestCommand.cs @@ -0,0 +1,20 @@ +using Microsoft.Extensions.CommandLineUtils; + +namespace Yi.Abp.Tool.Commands; + +public class TestCommand:ICommand +{ + public string Command => "clear"; + + public Task CommandLineApplicationAsync(CommandLineApplication application) + { + var sss= application.Option("-i| --id|-l ","内容id",CommandOptionType.SingleValue); + + application.OnExecute(() => + { + Console.WriteLine($"你好,---{sss.Value()}"); + return 0; + }); + return Task.CompletedTask; + } +} \ No newline at end of file diff --git a/Yi.Abp.Net8/tool/Yi.Abp.Tool/Commands/VersionCommand.cs b/Yi.Abp.Net8/tool/Yi.Abp.Tool/Commands/VersionCommand.cs index 86c56f96..74b520bf 100644 --- a/Yi.Abp.Net8/tool/Yi.Abp.Tool/Commands/VersionCommand.cs +++ b/Yi.Abp.Net8/tool/Yi.Abp.Tool/Commands/VersionCommand.cs @@ -1,14 +1,14 @@ -namespace Yi.Abp.Tool.Commands -{ - public class VersionCommand : ICommand - { - public List CommandStrs => new List { "version", "v", "-version", "-v" }; - - public Task InvokerAsync(Dictionary options, string[] args) - { - var version = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version; - Console.WriteLine($"Yi-ABP TOOL {version}"); - return Task.CompletedTask; - } - } -} +// namespace Yi.Abp.Tool.Commands +// { +// public class VersionCommand : ICommand +// { +// public List CommandStrs => new List { "version", "v", "-version", "-v" }; +// +// public Task InvokerAsync(Dictionary options, string[] args) +// { +// var version = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version; +// Console.WriteLine($"Yi-ABP TOOL {version}"); +// return Task.CompletedTask; +// } +// } +// } diff --git a/Yi.Abp.Net8/tool/Yi.Abp.Tool/ICommand.cs b/Yi.Abp.Net8/tool/Yi.Abp.Tool/ICommand.cs index 8b9f9108..9f5a3447 100644 --- a/Yi.Abp.Net8/tool/Yi.Abp.Tool/ICommand.cs +++ b/Yi.Abp.Net8/tool/Yi.Abp.Tool/ICommand.cs @@ -3,21 +3,16 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using Microsoft.Extensions.CommandLineUtils; using Volo.Abp.DependencyInjection; namespace Yi.Abp.Tool { - public interface ICommand:ITransientDependency + public interface ICommand:ISingletonDependency { - /// - /// 命令串 - /// - public List CommandStrs { get; } + public string Command { get; } + + Task CommandLineApplicationAsync(CommandLineApplication application); - /// - /// 执行 - /// - /// - public Task InvokerAsync(Dictionary options, string[] args); } } diff --git a/Yi.Abp.Net8/tool/Yi.Abp.Tool/Program.cs b/Yi.Abp.Net8/tool/Yi.Abp.Tool/Program.cs index bcd9bfe5..5275e7d4 100644 --- a/Yi.Abp.Net8/tool/Yi.Abp.Tool/Program.cs +++ b/Yi.Abp.Net8/tool/Yi.Abp.Tool/Program.cs @@ -17,7 +17,8 @@ class Program //args = ["new", "Acme.Book", "-t", "module", "-csf"]; //args = ["new", "Acme.Book", "-t", "module"]; //args = ["add-module", "Acme.Demo", "-s", "D:\\code\\csharp\\source\\Yi\\Yi.Abp.Net8", "-modulePath", "D:\\code\\csharp\\source\\Yi\\Yi.Abp.Net8\\module\\acme-demo"]; - args = ["clear", "-path", "D:\\code\\csharp\\source\\Yi\\Yi.Abp.Net8\\src"]; + // args = ["clear", "-path", "D:\\code\\csharp\\source\\Yi\\Yi.Abp.Net8\\src"]; + args = ["clear","-i","888"]; #endif try { @@ -32,8 +33,8 @@ class Program //}) .UseAutofac() .Build(); - var commandSelector = host.Services.GetRequiredService(); - await commandSelector.SelectorAsync(args); + var commandSelector = host.Services.GetRequiredService(); + await commandSelector.InvokerAsync(args); } catch (Exception ex) {