You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为自定义dotnet CLI工具添加-name、-place类自定义命令选项

.NET CLI工具自定义命令选项实现方案

你已经配置了<ToolCommandName>helloworld</ToolCommandName>实现了命令直接调用,要支持-name、-place这类自定义选项,有两种成熟的实现方式:

方式一:原生解析启动参数(无额外依赖)

.NET控制台应用默认会把用户输入的所有命令行参数传入程序入口Main方法的string[] args数组,直接遍历这个数组就能提取对应选项的值,不需要引入任何第三方包:

  1. 修改程序入口的参数处理逻辑,参考代码如下:
// 先给参数设置默认值
string name = "陌生人";
string place = "未知地点";

// 遍历传入的参数数组做解析
for (int i = 0; i < args.Length; i++)
{
    switch (args[i])
    {
        case "-name":
            // 校验索引防止越界,选项后紧跟的就是对应的参数值
            if (i + 1 < args.Length)
            {
                name = args[i + 1];
                i++; // 跳过已经读取的参数值,避免重复解析
            }
            break;
        case "-place":
            if (i + 1 < args.Length)
            {
                place = args[i + 1];
                i++;
            }
            break;
        // 后续新增选项直接按相同格式追加case即可
    }
}

// 业务逻辑,这里可以替换成你自己的处理代码
Console.WriteLine($"你好 {name},欢迎来到 {place}!");
  1. 重新打包、安装更新后的CLI工具,执行helloworld -name mark -place Virginia就能正确读取到传入的两个参数。

这种方式适合参数少、逻辑简单的小型工具,所有解析逻辑完全可控。如果需要支持帮助文档自动生成、参数类型校验、子命令等复杂能力,自己写解析逻辑会很繁琐,推荐用下面的官方库方案。

方式二:使用System.CommandLine实现(官方推荐,适配复杂场景)

System.CommandLine是微软官方维护的命令行解析库,内置了参数解析、校验、帮助文档生成、tab补全等常用CLI能力,不需要自己写遍历解析的重复代码:

  1. 首先给项目安装对应的NuGet包,在项目目录执行命令:
dotnet add package System.CommandLine
  1. 修改程序逻辑,定义选项、绑定处理逻辑即可,参考代码(兼容.NET 6+顶级语句写法):
using System.CommandLine;

// 定义-name选项,指定参数类型、描述、默认值
var nameOption = new Option<string>(
    "-name",
    description: "指定要问候的用户名称",
    getDefaultValue: () => "陌生人"
);
// 定义-place选项
var placeOption = new Option<string>(
    "-place",
    description: "指定地点名称",
    getDefaultValue: () => "未知地点"
);

// 初始化根命令,挂载自定义选项
var rootCommand = new RootCommand("helloworld 测试CLI工具");
rootCommand.AddOption(nameOption);
rootCommand.AddOption(placeOption);

// 绑定命令执行逻辑,解析完成的参数会自动传入委托
rootCommand.SetHandler((string name, string place) =>
{
    // 这里写你的业务逻辑
    Console.WriteLine($"你好 {name},欢迎来到 {place}!");
}, nameOption, placeOption);

// 启动命令行解析流程
return rootCommand.Invoke(args);
  1. 重新打包安装工具后,除了支持你需要的helloworld -name mark -place Virginia调用形式,还会自动支持helloworld --help查看使用说明、参数类型错误提示、缺省参数自动填充默认值等能力,不需要额外开发。

内容的提问来源于stack exchange,提问作者Abhicruiser

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.07 16:15:42