CommandLineParser-值不变

时间:2019-03-20 13:09:07

标签: c# command-line-arguments

我创建了一个使用CommandLineParser library的小项目。

我从指南 C#快速入门中提取了一个小代码段:

using System;
using CommandLine;

namespace QuickStart
{
    class Program
    {
        public class Options
        {
            [Option('v', "verbose", Required = false, HelpText = "Set output to verbose messages.")]
            public bool Verbose { get; set; }
        }

        static void Main(string[] args)
        {
            Parser.Default.ParseArguments<Options>(args)
                   .WithParsed<Options>(o =>
                   {
                       if (o.Verbose)
                       {
                           Console.WriteLine($"Verbose output enabled. Current Arguments: -v {o.Verbose}");
                           Console.WriteLine("Quick Start Example! App is in Verbose mode!");
                       }
                       else
                       {
                           Console.WriteLine($"Current Arguments: -v {o.Verbose}");
                           Console.WriteLine("Quick Start Example!");
                       }
               });
        }
    }
}

我可以通过命令promt启动程序,

dotnet CommandLineParserTestProject.dll

输出符合预期:

Current Arguments: -v False
Quick Start Example!

然后我放:

dotnet CommandLineParserTestProject.dll -v true

输出再次符合预期:

Verbose output enabled. Current Arguments: -v True
Quick Start Example! App is in Verbose mode!

现在是问题:

从上面这两个命令之后,我输入:

dotnet CommandLineParserTestProject.dll -v false

但是输出仍然是:

Verbose output enabled. Current Arguments: -v True
Quick Start Example! App is in Verbose mode!

仅当我输入dotnet CommandLineParserTestProject.dll false时,它dotnet CommandLineParserTestProject.dll -v false似乎无效。

有人知道为什么会这样吗?

1 个答案:

答案 0 :(得分:2)

布尔型命令行选项不带参数(即true / false);您要么包含它们,要么不包含它们。因此,将忽略命令行末尾的true / false参数。当解析器看到-v选项时,将打开详细输出;当您从命令行省略-v时,将关闭详细输出。

再次参考文档,您应该考虑以推荐的方式处理未解析的选项:

.WithNotParsed<Options>((errs) => HandleParseError(errs));

...,这会告诉您您的true / false参数将被忽略。