command-line-api
command-line-api copied to clipboard
Validator API: Error message duplicated for array argument
Problem
When using the validator API for an array Argument
, a set ErrorMessage
will result in a duplicate message being output when the argument is completely omitted.
Steps to reproduce
using System.CommandLine;
var inputDirectoryArgument = new Argument<DirectoryInfo>(name: "Input directory");
inputDirectoryArgument
.AddValidator(result =>
{
result.ErrorMessage = "Validation error on input directory";
});
var outputDirectoriesArgument = new Argument<DirectoryInfo[]>(name: "Output directories");
outputDirectoriesArgument
.AddValidator(result =>
{
result.ErrorMessage = "Validation error on output directories";
});
var rootCommand = new RootCommand();
rootCommand.Add(inputDirectoryArgument);
rootCommand.Add(outputDirectoriesArgument);
rootCommand.SetHandler((DirectoryInfo inputDirectory, DirectoryInfo[] outputDirectories) => { }, inputDirectoryArgument, outputDirectoriesArgument);
return await rootCommand.InvokeAsync(args);
Incorrect behavior:
.\BugReport.exe input
Validation error on input directory
Validation error on output directories
Validation error on output directories
Correct behavior:
.\BugReport.exe
Required argument missing for command: 'BugReport'.
.\BugReport.exe input output
Validation error on input directory
Validation error on output directories
.\BugReport.exe input output1 output2
Validation error on input directory
Validation error on output directories
Environment
.NET 6.0 System.CommandLine 2.0.0-beta3.22114.1