CommandLineParser - 如果没有给出开关,则显示 --help 结果

Posted

技术标签:

【中文标题】CommandLineParser - 如果没有给出开关,则显示 --help 结果【英文标题】:CommandLineParser - Show --help results if no switch is given 【发布时间】:2021-06-04 05:51:29 【问题描述】:

使用CommandLineParser NuGet,当我在没有参数的情况下运行我的应用程序时,是否可以强制显示 --help 结果输出,就像我要运行我的应用程序一样......

myapplication.exe --help

目前,当我运行我的应用程序时,如果我没有指定任何选项,它不会显示帮助输出。它只是结束应用程序。我有许多不同的选项/标志/参数可以使用。他们都不应该被强迫自己,但我至少需要一个来使用或提供帮助。

我目前的实现...

public class Options

    [Option(
        'v',
        Required = false,
        HelpText = "Shows all debug information when processing."
    )]
    public bool Verbose  get; set; 

    [Option(
        Required = false,
        HelpText = "Runs Test One."
    )]
    public bool TestOne  get; set; 


static void Main(string[] args)

    try
    
        var parserResults = Parser.Default.ParseArguments<Options>(args);

        parserResults
            .WithParsed<Options>(options => Run(options));
    
    catch (Exception ex)
    
        Console.WriteLine(ex.Message);
    

    Console.WriteLine("Main thread closing.");


static void Run(Options options)

    // Verbose mode
    if (options.Verbose)
    
        m_Verbose = true;
        Console.WriteLine("Verbose mode on.");
    
    
    // Test
    if (options.TestOne)
    
        //do test
    

【问题讨论】:

@Sinatr 我想你可能误解了我的问题。因此,我对其进行了详细说明,希望它不值得被否决……我遇到的问题是,当我在没有参数的情况下运行我的应用程序时,我只能从我的示例中得到测试Main thread closing.。我根本没有收到任何帮助文本,我希望它给我帮助文本。 你有异常吗? 什么都没有。让我觉得这是预期的用途。 除了我的回答之外,您还可以尝试Options 属性上的Group 属性:github.com/commandlineparser/commandline/wiki/Option-Attribute 【参考方案1】:

我能够使用以下两个技巧来完成这项工作:

https://github.com/commandlineparser/commandline/issues/138#issuecomment-341920340 https://github.com/commandlineparser/commandline/issues/138#issuecomment-527936051

下面是一些示例代码:

using CommandLine;
using CommandLine.Text;

internal static class Main

    public static void Main(string[] Arguments)
    
        HelpText oHelpText;
        ParserResult<Command.Options> oResult;

        oResult = Parser.Default.ParseArguments<Command.Options>(Arguments);
        oResult.Success(Options => Run(Options));

        oHelpText = HelpText.AutoBuild(oResult, x => x, x => x);

        Console.WriteLine(oHelpText);
        Console.ReadLine();
    

    private static void Run(Command.Options Options)
    
        switch (Options.Type)
        
            case Command.Types.Folder:
                
                    break;
                

            case Command.Types.File:
                
                    break;
                
        
    


internal static class Extensions

    public static ParserResult<Command.Options> Success(this ParserResult<Command.Options> Instance, Action<Command.Options> Action)
    
        return Instance.WithParsed(Action);
    

    public static ParserResult<Command.Options> Failure(this ParserResult<Command.Options> Instance, Action<Command.Options> Action)
    
        return Instance.WithNotParsed(Action);
    


namespace Command

    internal class Options
    
        [Option("s", "source", HelpText = "The source folder that contains the designated files/subfolders")]
        public string Source  get; set; 

        [Option("t", "target", HelpText = "The target folder to which to move the files/subfolders")]
        public string Target  get; set; 

        [Option("y", "type", HelpText = "The source type [File | Folder]")]
        public Enums.Types Type  get; set; 

        [Option("c", "chunksize", HelpText = "The size of each chunk to move")]
        public int ChunkSize  get; set; 
    

    internal static class Enums
    
        public enum Types
        
            Folder,
            File
        
    


【讨论】:

以上是关于CommandLineParser - 如果没有给出开关,则显示 --help 结果的主要内容,如果未能解决你的问题,请参考以下文章

CommandLineParser 库 - 如何将一个选项的输出用于下一个选项

CommandLineParser 不接受内部带有减号的参数

C#CommandLineParser

[C++][原创]opencv中CommandLineParser使用

[C++][原创]opencv中CommandLineParser使用

csharp https://commandline.codeplex.com/上的CommandLineParser Nuget软件包的文档已过时。以下是更新的工作