C#CommandLineParser - 帮助打印然后停止

Fed*_* E. 5 c# command-line-parser

我正在构建一个C#控制台应用程序,它使用CommandLineParser从cmd获取一些参数.

默认情况下,该库已经带有--help(或help verb),以显示有关接受的每个参数的帮助信息.

现在,当我运行--help命令时,我会得到帮助屏幕,但随后程序继续,但它会中断,因为未设置其他默认参数.

代码如下所示:

class Options
{
    [Option('f', "force", Required = false, Default = false,
        HelpText = "Force ....")]
    public bool Force { get; set; }

    [Option('v', "version", Required = false, Default = "",
        HelpText =
            "....")]
    public string Version { get; set; }

    [Option('s', "silent", Required = false, Default = false, HelpText = "Disables output ...")]
    public bool Output { get; set; }

    [Option('p', "path", Required = false, Default = "../some/dir/",
        HelpText =
            "Specifies the path ...")]
    public string StartPath { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

然后在程序中:

static int Main(string[] args)
{

    try
    {

        var opts = new Options();

        Parser.Default.ParseArguments<Options>(args).WithParsed(parsed => opts = parsed);

        string version = opts.Version;

        PATCH_LOCATION = opts.StartPath;

        ....
Run Code Online (Sandbox Code Playgroud)

所以我得到了帮助屏幕,然后程序继续运行(因为没有设置opts.StarPath,所以其他任何默认设置都没有).

知道如何在收到"help"命令时"退出"程序吗?

注意:如果使用未知参数,CommandLineParser也会抛出帮助屏幕,该参数也应该退出程序.

Jon*_*eet 13

你应该检查ParseResult返回的WithParsed:

var result = Parser.Default
    .ParseArguments<Options>(args)
    .WithParsed(parsed => opts = parsed);
if (result.Tag == ParserResultType.NotParsed)
{
    // Help text requested, or parsing failed. Exit.
    return 1;
}
Run Code Online (Sandbox Code Playgroud)

(我相信请求帮助相当于解析失败.绝对值得检查.)