Skip to content

ParameterMissingException when parsing equal-separated key-value pair args #3

@fuweichin

Description

@fuweichin

Commander.NET throws ParameterMissingException when parsing equal-separated key-value pair args.

Steps to Reproduce

Step 1: NginxRunConfig.cs

namespace NginxGUI
{
    internal class NginxRunConfig
    {
        [Parameter("--command", Description = "Path of the nginx command")]
        public string Command;

        [Parameter("--prefix")]
        public string Prefix;

        [Parameter("--pid-path")]
        public string PidPath;

        [Parameter("--error-log-path")]
        public string ErrorLogPath;
    }
}

Step 2: Program.cs

namespace NginxGUI
{
    internal static class Program
    {
        [STAThread]
        static void Main(string[] args)
        {
            NginxRunConfig rc = null;
            CommanderParser<NginxRunConfig> parser = new CommanderParser<NginxRunConfig>();
            parser.Add(args)
                .Separators(Separators.Equals)
                .Bindings(BindingFlags.Public | BindingFlags.Instance);
            try
            {
                rc = parser.Parse();
            }
            catch (ParameterMissingException ex)
            {
                Console.WriteLine("Missing parameter: " + ex.ParameterName);
            }
            catch (ParameterFormatException ex)
            {
                Console.WriteLine(ex.Message);
            }
            // ...
        }
    }
}

Step 3: Debug CLI Arguments

--command=C:\Library\nginx-1.22.0\nginx.exe --prefix=C:\Library\nginx-1.22.0 --pid-path=logs\nginx.pid --error-log-path=logs\error.log

Expected Result

As [doucmentation](https://github.com/gmantaos/Commander.NET#key-value-separators) says

Currently available separators:

  • Separators.Space
  • Separators.Equals
  • Separators.Colon
  • Separators.All

since separator flags of key-value pair were set to Separators.Equals, so Arg --command=C:\Library\nginx-1.22.0\nginx.exe should be accepted by the parser.

Actual Result

A ParameterFormatException occurred:

Missing parameter: --command

If I change separators to Separators.Space and change CLI Arguments to space-separated key-value pair, like--command C:\Library\nginx-1.22.0\nginx.exe, then Args can to parsed successfully.

Additional Information

  • Commander.NET 1.1.11
  • .Net Framework 4.8
  • Windows 10.0.19044

Have I missed something?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions