c# - CommandLineParser - 值不变

标签 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!");
                       }
               });
        }
    }
}

我可以通过命令提示符启动程序

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 似乎不起作用。

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

最佳答案

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

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

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

...这会通知您您的 true/false 参数被忽略了。

关于c# - CommandLineParser - 值不变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55261514/

相关文章:

c - 在 C 中处理命令行参数时出错

xcode - 终端中的 "./"和 "open"有什么区别,如何从 XCode 运行 Unix 可执行文件?

c# - 在 WinForm C# 中获取最新的 xml (url)

捕获命令行参数并存储它

c# - Entity Framework LINQ 投影到自定义类型导致数据丢失

c# - 如何使用 Emgu CV 检测图像中的箭头?

c - 接受论据并使用它

c - 使用 getopt 获取非指定参数 C

c# - 当它是一个 toshortdatestring 时,Linq 排序日期

c# - 如何在安全上下文中使用不安全代码?