C# System.Commandline:如何向命令添加参数以便可以向其传递值?

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

以下简单的

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

c# arguments parameter-passing .net-6.0 system.commandline
1个回答
0
投票

查看 System.CommandLine 的命令行语法概述 文档。

它将 options 定义为:

选项是可以传递给命令的命名参数。 POSIX 约定是在选项名称前添加两个连字符 (

--
)。

参数为:

参数是传递给选项或命令的值。

基本上是传递给命令或选项的无名参数(没有名称),即在您的第一个片段中有效的调用将是:

appName "Hello World"
© www.soinside.com 2019 - 2024. All rights reserved.