使用Spectre.Console定制.NET控制台输出样式演示
创建一个控制台项目,引用包Spectre.Console。或者如果需要定制控制台cli命令,也可以引用 Spectre.Console.Cli ,里面自带包含了Spectre.Console

先做个最简单的输出演示,例如下划线、背景色、加粗等,如下图演示所示。

MarkupLine对应WriteLine的效果,去掉Line,就代表没了换行。需要实现的输出样式里面,字符串在两个[]之间,样式结束以[/]结尾。
AnsiConsole.MarkupLine("[underline green]绿色下划线[/]"); AnsiConsole.MarkupLine("[blue on white]这是蓝底白字[/]"); AnsiConsole.MarkupLine("这是正常文本"); AnsiConsole.MarkupLine("[bold]这是粗体文本[/]");
也可以输出表格样式,例如如下图所示效果

// 创建一个表格 var table = new Table(); // 设置表格的标题 table.Title("[bold green]员工信息表[/]"); // 添加列(可以设置对齐方式等属性) table.AddColumn(new TableColumn("[u]姓名[/]").Centered()); table.AddColumn(new TableColumn("[u]部门[/]").Centered()); table.AddColumn(new TableColumn("[u]职位[/]").Centered()); table.AddColumn(new TableColumn("[u]邮箱[/]").Centered()); // 添加行 table.AddRow("张三", "技术部", "软件工程师", "zhangsan@example.com"); table.AddRow("李四", "市场部", "市场分析师", "lisi@example.com"); table.AddRow("王五", "人力资源部", "招聘专员", "wangwu@example.com"); // 设置表格的样式 table.Border(TableBorder.Rounded); table.BorderColor(Color.Red); table.Alignment = Justify.Center; // 显示表格 AnsiConsole.Write(table);
也可以设计进度条动态效果:

AnsiConsole.Progress() .Start(progress => { // 创建一个进度条任务 var task = progress.AddTask("[green]下载中...[/]"); while (!task.IsFinished) { // 更新进度条的进度 task.Increment(0.5); Thread.Sleep(50); } });
也可以设计类似pip下载时候的动态耗时效果:

// 使用 Status 方法来实现动态显示 AnsiConsole.Status() .Start("计时器...", ctx => { while (true) { // 计算已经过去的时间 TimeSpan elapsed = DateTime.Now - startTime; // 更新状态文本 ctx.Status($"耗时: [bold yellow]{elapsed.TotalSeconds:n1}[/] 秒"); // 刷新频率,每200毫秒更新一次 System.Threading.Thread.Sleep(200); } });
如果以上内容对你有帮助,欢迎转发、点赞、评论等。谢谢! 也欢迎关注个人公众号:【Dotnet Dancer】
参考文献:
[1]:Spectre.Console官方开源项目地址:https://github.com/spectreconsole/spectre.console
[2]:文档地址:https://spectreconsole.net/quick-start
本文作者:Wesky
微信号:WeskyNet001
公众号:Dotnet Dancer
文章链接:https://www.cnblogs.com/weskynet/p/18467930

欢迎扫一扫关注公众号,发现更多其他技术分享
分类:
.net core
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 没有源码,如何修改代码逻辑?
· NetPad:一个.NET开源、跨平台的C#编辑器