通过System.CommandLine快速生成支持命令行的应用

一直以来,当我们想让我们的控制台程序支持命令行启动时,往往需要编写大量代码来实现这一看起来很简单的功能。虽然有一些库可以简化一些操作,但整个过程仍然是一个相当枯燥而乏味的过程。我之前也写过一些文章简单的介绍过它们:

今天,我这里要介绍一个新的命令行库:System.CommandLine,通过他我们可以几乎无需任何额外的编码就可以获得命令行的支持,它能大幅减少程序员花在提供命令行API(CLI)上的时间,改善CLI程序用户的体验,让开发者能专注于编写应用程序。

目前这个库还是预览版本,要体验的话需要可以使用如下库:System.CommandLine.DragonFruit。首先以一个简单的示例来演示它的功能。

static void Main(string input, string output)
{
    Console.WriteLine($"Input: {input}, Output: {output}");
}

这里我们并没有要显式使用这个库,只需要将Main函数的入参改成我们需要使用的类型,程序便自动实现了命令行的支持。我们甚至可以用—help查看程序的命令行的配置方式

ConsoleApp1.exe --help
    Usage:
     ConsoleApp1 [options]
    Options:
     --input <INPUT> input
     --output <OUTPUT> output
     --version Display version information

可见,它能自动根据Main函数的参数自动解析出命令行的格式,并生成帮助文档。

接着,我们再来看看命令行的使用:

ConsoleApp1 --input ii --output out
    Input: ii, Output: out

完美的进行了命令行的解析,它也可以读取xml注释,实现更加复杂的说明。

/// <summary>
/// Converts an image file from one format to another.
/// </summary>
/// <param name="input">The path to the image file that is to be converted.</param>
/// <param name="output">The name of the output from the conversion.</param>
/// <param name="xCropSize">The x dimension size to crop the picture. The default is 0 indicating no cropping is required.</param>
/// <param name="yCropSize">The x dimension size to crop the picture. The default is 0 indicating no cropping is required.</param>
static void Main(string input, string output, int xCropSize = 0, int yCropSize = 0)
{
}

生成的帮助输出效果如下:

ConsoleApp1:
     Converts an image file from one format to another.
    Usage:
     ConsoleApp1 [options]
    Options:
     --input <INPUT> The path to the image file that is to be converted.
     --output <OUTPUT> The name of the output from the conversion.
     --x-crop-size <X-CROP-SIZE> The x dimension size to crop the picture. The default is 0 indicating no cropping is required.
     --y-crop-size <Y-CROP-SIZE> The x dimension size to crop the picture. The default is 0 indicating no cropping is required.
     --version Display version information

相比传统的命令行库,这个库的优势非常明显,我们可以几乎不编写任何代码就可以获得命令行程序的支持。对于复杂的命令行程序来说,可能这里的方式并不能满足需求。System.CommandLine虽然也支持像传统命令行的库那样编写复杂的命令行支持程序,但这不在本文的介绍范围内。感兴趣的朋友可以看一下参考文章的内容。

参考文章:

原文地址:https://www.cnblogs.com/TianFang/p/10618573.html

时间: 2024-11-05 14:58:48

通过System.CommandLine快速生成支持命令行的应用的相关文章

项目属性--&gt;生成事件--&gt;后期生成事件命令行

以开源记牌器https://github.com/Epix37/Hearthstone-Deck-Tracker 为例,Hearthstone Deck Tracker项目中的后期生成事件命令行: if "$(ConfigurationName)" == "Release" ( rmdir /S /Q "..\Hearthstone Deck Tracker" mkdir "..\Hearthstone Deck Tracker&quo

学习使用的PL/0编译器增强版PL/0plusplusCompiler(二)加入支持命令行参数

每次程序运行后输入源码文件名不是很好,于是做了支持命令行参数的改进.大体思路:在main函数入口加入命令行参数,进入main后判断文件名是否为空,为空就退出,否则就继续编译. 在main的括号中加入 int argc, char** argv 在main第一行加入 /*如果没有在命令行中输入文件名会提示输入源码文件名*/ if(argv[1]==NULL){ printf("请输入源程序!\n"); return; } 把这两行注释掉 // printf("Input pl/

让.Net程序支持命令行启动

很多时候,我们需要让程序支持命令行启动,这个时候则需要一个命令行解析器,由于.Net BCL并没有内置命令行解析库,因此需要我们自己实现一个.对于简单的参数来说,自己写一个字符串比较函数来分析args参数也未尝不可.但是如果需要配置的参数较多的话,就得好好设计一下这个解析器了. 秉着不重复造轮子的原则,我在网上搜了一下,在Stackoverflow上发现有人问了同样的问题:Best way to parse command line arguments in C#?.简单的看了一下,整理出了其中

使用VS的生成事件命令行指令将生成的exe,dll文件复制到指定文件夹中

VS预生成事件命令行 和 生成后事件命令行 宏说明 $(ConfigurationName)            当前项目配置的名称(例如,“Debug|Any CPU”). $(OutDir)                              输出文件目录的路径,相对于项目目录.这解析为“输出目录”属性的值.它包括尾部的反斜杠“\”. $(DevEnvDir)                         Visual Studio 2005 的安装目录(定义为驱动器 + 路径):

C# VS预生成事件命令行 和 生成后事件命令行

宏 说明 $(ConfigurationName) 当前项目配置的名称(例如,“Debug|Any CPU”). $(OutDir) 输出文件目录的路径,相对于项目目录.这解析为“输出目录”属性的值.它包括尾部的反斜杠“\”. $(DevEnvDir) Visual Studio 2005 的安装目录(定义为驱动器 + 路径):包括尾部的反斜杠“\”. $(PlatformName) 当前目标平台的名称.例如“AnyCPU”. $(ProjectDir) 项目的目录(定义为驱动器 + 路径):包

C# XCOPY命令 预先生成事件命令行”和“后期生成事件命令行”

$(ConfigurationName) 当前项目配置的名称(例如,“Debug|Any CPU”). $(OutDir) 输出文件目录的路径,相对于项目目录.这解析为“输出目录”属性的值.它包括尾部的反斜杠“\”. $(DevEnvDir) Visual Studio 2005 的安装目录(定义为驱动器 + 路径):包括尾部的反斜杠“\”. $(PlatformName) 当前目标平台的名称.例如“AnyCPU”. $(ProjectDir) 项目的目录(定义为驱动器 + 路径):包括尾部的反

VS2010-使用“预先生成事件命令行”和“后期生成事件命令行”功能

xcopy /r /y $(TargetPath) $(ProjectDir)..\Bin\ xcopy /r /y $(TargetDir)$(TargetName).pdb $(ProjectDir)..\Bin\xcopy /r /y $(TargetPath) $(ProjectDir)..\Release\xcopy /r /y $(TargetDir)$(TargetName).pdb $(ProjectDir)..\Release\ xcopy /r /y $(ProjectDir

UNIX环境编程学习笔记(22)——进程管理之system 函数执行命令行字符串

lienhua342014-10-15 ISO C 定义了 system 函数,用于在程序中执行一个命令字符串.其声明如下, #include <stdlib.h> int system(const char *cmdstring); system 函数在其实现中调用了 fork.exec 和 waitpid 函数.system 函数调用 fork 函数创建子进程,然后由子进程调用’/bin/sh -c cmdstring’ 来执行命令行参数 cmdstring,此命令执行完后便返回调用的进程

nginx 支持的命令行参数

Command-line parameters 命令行参数 nginx supports the following command-line parameters: nginx支持以下命令行参数 -? | -h - print help for command-line parameters. -? | -h -打印命令行参数的帮助 -c file - use an alternative configuration file instead of a default file. -c fil