我很难理解 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 退出?
我也想知道,如何指定
new[] { 1234567890 }
作为选项的默认值,我在 System.CommandLine 文档中找不到它。
下面是我的测试用例及其输出的屏幕截图:
是的,程序的执行不应终止整个应用程序,这是命令行命令工具集的设计。
现在,进行检测。如果未成功完成,
rootCommand.InvokeAsync
方法将返回非零结果。因此,在您的情况下,只需检查输出:
int result = await rootCommand.InvokeAsync(args);
if (result != 0)
{
// Handle the failure of the rootCommand's call.
return;
}