”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > C# |使用 System.CommandLine 库构建命令行 (CLI) 应用程序

C# |使用 System.CommandLine 库构建命令行 (CLI) 应用程序

发布于2024-07-31
浏览:770

C# | Building a Command-Line (CLI) App using System.CommandLine Library

笔记
您可以查看我个人网站上的其他帖子:https://hbolajraf.net

介绍

在本指南中,我们将探讨如何使用 C# 和 .NET 中的 System.CommandLine 库构建命令行界面 (CLI) 应用程序。 System.CommandLine 简化了为您的应用程序创建强大且功能丰富的命令行界面的过程。

先决条件

开始之前,请确保您已安装以下软件:

  • .NET SDK(版本5.0或更高版本)

第 1 步:创建一个新的控制台应用程序

dotnet new console -n MyCommandLineApp
cd MyCommandLineApp

步骤2:添加System.CommandLine NuGet包

dotnet add package System.CommandLine --version 2.0.0-beta1.21308.1

步骤 3:定义命令行选项

在您的 Program.cs 中,使用 System.CommandLine 定义命令行选项:

using System.CommandLine;
using System.CommandLine.Invocation;

class Program
{
    static int Main(string[] args)
    {
        var rootCommand = new RootCommand
        {
            new Option("--number", "An integer option"),
            new Option("--flag", "A boolean option"),
            new Argument("input", "A required input argument")
        };

        rootCommand.Handler = CommandHandler.Create((number, flag, input) =>
        {
            // Your application logic goes here
            Console.WriteLine($"Number: {number}");
            Console.WriteLine($"Flag: {flag}");
            Console.WriteLine($"Input: {input}");
        });

        return rootCommand.Invoke(args);
    }
}

第 4 步:运行 CLI 应用程序

dotnet run -- --number 42 --flag true "Hello, CLI!"

将这些值替换为您自己的值并查看输出。

第 5 步:自定义帮助文本

为您的选项和参数添加描述以获得更好的帮助文本:

var rootCommand = new RootCommand
{
    new Option("--number", "An integer option"),
    new Option("--flag", "A boolean option"),
    new Argument("input", "A required input argument")
};

rootCommand.Description = "A simple CLI app";
rootCommand.Handler = CommandHandler.Create((number, flag, input) =>
{
    Console.WriteLine($"Number: {number}");
    Console.WriteLine($"Flag: {flag}");
    Console.WriteLine($"Input: {input}");
});

接下来是什么?

您已使用 C# 和 .NET 中的 System.CommandLine 库成功创建了基本的命令行界面 (CLI) 应用程序。根据您的具体要求自定义和扩展应用程序。
更多信息请参考官方文档:System.CommandLine GitHub

版本声明 本文转载于:https://dev.to/hbolajraf/c-building-a-command-line-cli-app-using-systemcommandline-library-128e如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 版本5.6.5之前,使用current_timestamp与时间戳列的current_timestamp与时间戳列有什么限制?
    版本5.6.5之前,使用current_timestamp与时间戳列的current_timestamp与时间戳列有什么限制?
    在时间戳列上使用current_timestamp或MySQL版本中的current_timestamp或在5.6.5 此限制源于遗留实现的关注,这些限制需要对当前的_timestamp功能进行特定的实现。 创建表`foo`( `Productid` int(10)unsigned not n...
    编程 发布于2025-03-25
  • 如何在无序集合中为元组实现通用哈希功能?
    如何在无序集合中为元组实现通用哈希功能?
    在未订购的集合中的元素要纠正此问题,一种方法是手动为特定元组类型定义哈希函数,例如: template template template 。 struct std :: hash { size_t operator()(std :: tuple const&tuple)const {...
    编程 发布于2025-03-25
  • 如何使用FormData()处理多个文件上传?
    如何使用FormData()处理多个文件上传?
    )处理多个文件输入时,通常需要处理多个文件上传时,通常是必要的。 The fd.append("fileToUpload[]", files[x]); method can be used for this purpose, allowing you to send multi...
    编程 发布于2025-03-25
  • 为什么尽管有效代码,为什么在PHP中捕获输入?
    为什么尽管有效代码,为什么在PHP中捕获输入?
    在php ;?>" method="post">The intention is to capture the input from the text box and display it when the submit button is clicked.但是,输出...
    编程 发布于2025-03-25
  • \“(1)vs.(;;):编译器优化是否消除了性能差异?\”
    \“(1)vs.(;;):编译器优化是否消除了性能差异?\”
    答案: 在大多数现代编译器中,while(1)和(1)和(;;)之间没有性能差异。编译器: perl: 1 输入 - > 2 2 NextState(Main 2 -E:1)V-> 3 9 Leaveloop VK/2-> A 3 toterloop(next-> 8 last-> 9 ...
    编程 发布于2025-03-25
  • 如何在JavaScript对象中动态设置键?
    如何在JavaScript对象中动态设置键?
    在尝试为JavaScript对象创建动态键时,如何使用此Syntax jsObj['key' i] = 'example' 1;不工作。正确的方法采用方括号: jsobj ['key''i] ='example'1; 在JavaScript中,数组是一...
    编程 发布于2025-03-25
  • 可以在纯CS中将多个粘性元素彼此堆叠在一起吗?
    可以在纯CS中将多个粘性元素彼此堆叠在一起吗?
    [2这里: https://webthemez.com/demo/sticky-multi-header-scroll/index.html </main> <section> { display:grid; grid-template-...
    编程 发布于2025-03-25
  • Numpy的矢量函数如何有效地证明数组的合理性?
    Numpy的矢量函数如何有效地证明数组的合理性?
    使用向量函数 Numpy提供使用矢量化函数的数组合理的方法,提供改进的性能和代码简单性,与传统的python循环相比,提供了改进的性能和代码简单性。在保持其形状的同时,左,右,向上或向下的非零元素。以下numpy实现执行有效的理由: = a [mask] 别的: out.t ...
    编程 发布于2025-03-25
  • 如何基于唯一的电子邮件值合并和重塑对象数组?
    如何基于唯一的电子邮件值合并和重塑对象数组?
    在数据操作领域中合并和将对象的数组与唯一的电子邮件值 考虑需要合并两个对象阵列,每个对象都包含电子邮件属性。目标是创建一个包含所有唯一电子邮件值的新数组。 , (对象)[“电子邮件” =>“ [电子邮件  prected]”], (对象)[“电子邮件” =>“ wefe...
    编程 发布于2025-03-25
  • 为什么不使用CSS`content'属性显示图像?
    为什么不使用CSS`content'属性显示图像?
    在Firefox extemers属性为某些图像很大,&& && && &&华倍华倍[华氏华倍华氏度]很少见,却是某些浏览属性很少,尤其是特定于Firefox的某些浏览器未能在使用内容属性引用时未能显示图像的情况。这可以在提供的CSS类中看到:。googlepic { 内容:url(&#...
    编程 发布于2025-03-25
  • 如何使用不同数量列的联合数据库表?
    如何使用不同数量列的联合数据库表?
    合并列数不同的表 当尝试合并列数不同的数据库表时,可能会遇到挑战。一种直接的方法是在列数较少的表中,为缺失的列追加空值。 例如,考虑两个表,表 A 和表 B,其中表 A 的列数多于表 B。为了合并这些表,同时处理表 B 中缺失的列,请按照以下步骤操作: 确定表 B 中缺失的列,并将它们添加到表的末...
    编程 发布于2025-03-25
  • 如何在鼠标单击时编程选择DIV中的所有文本?
    如何在鼠标单击时编程选择DIV中的所有文本?
    在鼠标上选择div文本单击带有文本内容,用户如何使用单个鼠标单击单击div中的整个文本?这允许用户轻松拖放所选的文本或直接复制它。 在单个鼠标上单击的div元素中选择文本,您可以使用以下Javascript函数: function selecttext(canduterid){ if(do...
    编程 发布于2025-03-25
  • 对象拟合:IE和Edge中的封面失败,如何修复?
    对象拟合:IE和Edge中的封面失败,如何修复?
    To resolve this issue, we employ a clever CSS solution that solves the problem:position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%)...
    编程 发布于2025-03-25
  • 如何克服PHP的功能重新定义限制?
    如何克服PHP的功能重新定义限制?
    克服PHP的函数重新定义限制在PHP中,多次定义一个相同名称的函数是一个no-no。尝试这样做,如提供的代码段所示,将导致可怕的“不能重新列出”错误。 但是,PHP工具腰带中有一个隐藏的宝石:runkit扩展。它使您能够灵活地重新定义函数。 runkit_function_renction_re...
    编程 发布于2025-03-25
  • 如何将MySQL数据库添加到Visual Studio 2012中的数据源对话框中?
    如何将MySQL数据库添加到Visual Studio 2012中的数据源对话框中?
    在Visual Studio 2012 尽管已安装了MySQL Connector v.6.5.4,但无法将MySQL数据库添加到实体框架的“ DataSource对话框”中。为了解决这一问题,至关重要的是要了解MySQL连接器v.6.5.5及以后的6.6.x版本将提供MySQL的官方Visual...
    编程 发布于2025-03-25

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3