我很难理解 System.CommandLine 的工作原理,并准备了一个简短的.Net fiddle来演示我的问题。
我正在尝试创建一个 C# 控制台应用程序,它将使用--nodes
选项调用并传递一个或多个数字 ID:
public static async Task Main(string[] args)
{
Option<long[]> nodesOption = new("-n", "--nodes")
{
Arity = ArgumentArity.OneOrMore,
Description = "Numerical node ids",
IsRequired = true,
};
RootCommand rootCommand = new("A test app for saving node ids");
rootCommand.AddGlobalOption(nodesOption);
await rootCommand.InvokeAsync(args);
Console.WriteLine("Why is this line printed?");
}
然而,当我调用上面的代码而不指定任何选项时,它确实会打印警告Option '-n' is required.
,但执行不会中止。
isRequired
当缺少全局选项时,应用程序不应该以代码 1 退出吗?
如果不应该,如何更改应用程序行为以使用代码 1 退出?
我还想知道如何指定 a作为选项的默认值,我在System.CommandLinenew[] { 1234567890 }
文档中找不到它。
下面是我的测试用例及其输出的屏幕截图:
是的,命令的执行不应终止整个应用程序,这是命令行工具集设计的。
现在,进行检测。如果未成功完成,该
rootCommand.InvokeAsync
方法将返回非零结果。因此,在您的情况下,只需检查输出:至于默认值,实际上有一个重载,它允许您指定一个委托,如果用户未输入任何值,该委托又应该提供默认值: