Closed
Description
Let's have a root command with one int16 option
var root = new RootCommand("Root command description");
var tstopt = new Option<Int16>("-t", "testing int16 option");
root.AddOption(tstopt);
If I use not numeric value I am getting an error as expected
Cannot parse argument 'hh' for option '-t' as expected type 'System.Int16'.
But when I add a validator
root.AddValidator((result) =>
{
if (string.IsNullOrEmpty(result.ErrorMessage) && result.GetValueForOption(tstopt) == 3)
{ result.ErrorMessage = "cannot be 3"; }
});
I am getting an exception
Unhandled exception. System.InvalidOperationException: Cannot parse argument 'hh' for option '-t' as expected type 'System.Int16'.
at System.CommandLine.Binding.ArgumentConverter.GetValueOrDefault[T](ArgumentConversionResult result)
at System.CommandLine.Parsing.OptionResult.GetValueOrDefault[T]()
at System.CommandLine.Parsing.SymbolResult.GetValueForOption[T](Option`1 option)
at Program.<>c__DisplayClass0_0.<<Main>$>b__0(CommandResult result) in C:\MyDiskArea\LiveProgProjects\IVAN_TEST\TechnologyTesting\System.CommandLine\ConsoleApp73\Program.cs:line 10
at System.CommandLine.Parsing.ParseResultVisitor.UseValidators(Command command, CommandResult innermostCommandResult)
at System.CommandLine.Parsing.ParseResultVisitor.ValidateCommandResult()
at System.CommandLine.Parsing.ParseResultVisitor.Stop()
at System.CommandLine.Parsing.ParseResultVisitor.Visit(SyntaxNode node)
at System.CommandLine.Parsing.Parser.Parse(IReadOnlyList`1 arguments, String rawInput)
at System.CommandLine.Parsing.ParserExtensions.InvokeAsync(Parser parser, String[] args, IConsole console)
at Program.<Main>$(String[] args) in C:\MyDiskArea\LiveProgProjects\IVAN_TEST\TechnologyTesting\System.CommandLine\ConsoleApp73\Program.cs:line 19
at Program.<Main>(String[] args)
So it seems that the custom validatio is runnin before built it ones.
Is it possible to change the behavior?