如何判断在System.CommandLine中是否使用了--help选项?
如何检测System.CommandLine自动添加的--help/-h/-?选项是否被使用?
你已经掌握了自定义选项的检测和取值方法,对于System.CommandLine自动注入的help选项,无法直接通过常规handler参数获取,但可以通过以下两种方式判断它是否被用户提供:
方法一:通过InvocationContext获取解析结果
利用InvocationContext中的ParseResult对象,可以检查所有被解析的选项,包括自动添加的help选项:
var rootCommand = new RootCommand("File Builder App"); // 自定义输出选项 var outputOption = new Option<string>(new[] { "-o", "--output" }, "Path to desired output folder."); rootCommand.AddOption(outputOption); rootCommand.SetHandler((outputPath, context) => { // 检查help选项是否被触发,支持任意别名 bool helpRequested = context.ParseResult.HasOption("--help") || context.ParseResult.HasOption("-h") || context.ParseResult.HasOption("-?"); if (helpRequested) { Console.WriteLine("用户触发了帮助选项"); } else { Console.WriteLine($"输出路径: {outputPath ?? "未指定"}"); } }, outputOption, InvocationContext.Current);
ParseResult.HasOption()方法可以传入选项的任意名称或别名,返回布尔值表示该选项是否被用户在命令行中提供。
方法二:替换默认help选项,转为自定义选项处理
如果需要更直接的控制,可以手动注册一个help选项替换默认的,这样就能像自定义选项一样在handler中直接接收值:
// 自定义help选项,覆盖默认的自动注入选项 var helpOption = new Option<bool>(new[] { "-h", "--help", "-?" }, "显示帮助信息") { IsHidden = false // 保持可见,和默认help选项行为一致 }; var rootCommand = new RootCommand("File Builder App"); rootCommand.AddGlobalOption(helpOption); // 自定义输出选项 var outputOption = new Option<string>(new[] { "-o", "--output" }, "Path to desired output folder."); rootCommand.AddOption(outputOption); rootCommand.SetHandler((outputPath, showHelp) => { if (showHelp) { Console.WriteLine("用户触发了帮助选项"); // 如需显示默认帮助内容,可手动调用Invoke触发 rootCommand.Invoke("--help"); } else { Console.WriteLine($"输出路径: {outputPath ?? "未指定"}"); } }, outputOption, helpOption);
这种方式下,当用户输入-h/--help/-?时,showHelp参数会被设为true,直接在handler中判断即可。
内容的提问来源于stack exchange,提问作者hribayz
相关产品推荐
相关产品推荐

