Skip to content

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

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?

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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