我创建了一个使用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
似乎无效。
有人知道为什么会这样吗?
答案 0 :(得分:2)
布尔型命令行选项不带参数(即true / false);您要么包含它们,要么不包含它们。因此,将忽略命令行末尾的true / false参数。当解析器看到-v选项时,将打开详细输出;当您从命令行省略-v时,将关闭详细输出。
再次参考文档,您应该考虑以推荐的方式处理未解析的选项:
.WithNotParsed<Options>((errs) => HandleParseError(errs));
...,这会告诉您您的true / false参数将被忽略。