尽管缺少必需的全局选项,为什么 C# 应用程序没有中止?

问题描述 投票:0回答:1

我很难理解 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 文档中找不到它。

下面是我的测试用例及其输出的屏幕截图:

c# .net-core command-line-interface command-line-arguments system.commandline
1个回答
0
投票

是的,程序的执行不应终止整个应用程序,这是命令行命令工具集的设计。

现在,进行检测。如果未成功完成,

rootCommand.InvokeAsync
方法将返回非零结果。因此,在您的情况下,只需检查输出:

int result = await rootCommand.InvokeAsync(args);

if (result != 0)
{
    // Handle the failure of the rootCommand's call.
    return;
}
© www.soinside.com 2019 - 2024. All rights reserved.