以下简单的
Program.cs
期望定义的根命令有一个参数:
using System.CommandLine;
var inputArgument = new Argument<string>(
name: "--input",
description: "input any value and print it out");
var rootCommand = new RootCommand();
rootCommand.AddArgument(inputArgument);
rootCommand.SetHandler((inputArgumentValue) =>
{
Console.WriteLine($"{inputArgumentValue}");
}, inputArgument);
rootCommand.Invoke(args);
我希望使用以下参数来调用它:
--input "Hello World"
在 shell 中打印出 Hello World。但是我收到以下错误:
Unrecognized command or argument 'Hello World'.
当我用 Option 替换 Argument 类时,它按预期工作:
using System.CommandLine;
var inputArgument = new Option<string>(
name: "--input",
description: "input any value and print it out");
var rootCommand = new RootCommand();
rootCommand.AddOption(inputArgument);
rootCommand.SetHandler((inputArgumentValue) =>
{
Console.WriteLine($"{inputArgumentValue}");
}, inputArgument);
rootCommand.Invoke(args);
我对
Argument
课程有什么误解?为什么我不能传递一个带有值的参数?
由于其其他属性,我想使用参数类而不是选项。我正在使用 .NET 6.0 和 System.CommandLine 版本 2.0.0-beta4.22272.1
查看 System.CommandLine 的命令行语法概述 文档。
它将 options 定义为:
选项是可以传递给命令的命名参数。 POSIX 约定是在选项名称前添加两个连字符 (
)。--
和参数为:
参数是传递给选项或命令的值。
基本上是传递给命令或选项的无名参数(没有名称),即在您的第一个片段中有效的调用将是:
appName "Hello World"