CommandLineParser - 值不变
CommandLineParser - Value not changing
我创建了一个小项目,它使用 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
好像不行
有人知道为什么会这样吗?
布尔命令行选项不带参数(即true/false);您要么包括它们,要么不包括它们。因此,命令行末尾的 true/false 参数将被忽略。当解析器看到 -v 选项时打开详细输出,当您从命令行中省略 -v 时关闭详细输出。
参考文档,您应该考虑以推荐的方式处理未解析的选项:
.WithNotParsed<Options>((errs) => HandleParseError(errs));
...这会通知您您的 true/false 参数被忽略了。
我创建了一个小项目,它使用 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
好像不行
有人知道为什么会这样吗?
布尔命令行选项不带参数(即true/false);您要么包括它们,要么不包括它们。因此,命令行末尾的 true/false 参数将被忽略。当解析器看到 -v 选项时打开详细输出,当您从命令行中省略 -v 时关闭详细输出。
参考文档,您应该考虑以推荐的方式处理未解析的选项:
.WithNotParsed<Options>((errs) => HandleParseError(errs));
...这会通知您您的 true/false 参数被忽略了。