Closed
Description
Hello,
i tried all 2.4.x versions (2.4.0, 2.4.1, 2.4.2, 2.4.3) and all have the same exception. In my unit-test i call my program only with "--help" after that, i receive the following stacktrace:
// Stacktrace
System.ArgumentNullException
Value cannot be null.
Parameter name: element
at System.Attribute.GetCustomAttributes(Assembly element, Type attributeType, Boolean inherit)
at System.Reflection.CustomAttributeExtensions.GetCustomAttributes[T](Assembly element)
at CommandLine.Infrastructure.ReflectionHelper.GetAttribute[TAttribute]()
at CommandLine.Text.HelpText.AutoBuild[T](ParserResult`1 parserResult, Func`2 onError, Func`2 onExample, Boolean verbsIndex, Int32 maxDisplayWidth)
at CommandLine.Text.HelpText.AutoBuild[T](ParserResult`1 parserResult, Int32 maxDisplayWidth)
at CommandLine.Parser.<>c__DisplayClass17_0`1.<DisplayHelp>b__1(IEnumerable`1 _, TextWriter writer)
at CSharpx.MaybeExtensions.Do[T1,T2](Maybe`1 maybe, Action`2 action)
at CommandLine.ParserResultExtensions.WithNotParsed[T](ParserResult`1 result, Action`1 action)
at CommandLine.Parser.DisplayHelp[T](ParserResult`1 parserResult, TextWriter helpWriter, Int32 maxDisplayWidth)
at Program.<Main>d__5.MoveNext() in C:\..\..\Program.cs:line 33
My code snippets are the following ones:
// Test method (xUnit) which fails
[Fact]
public async Task CallMain_GiveHelpArgument_ExpectSuccess() {
var result = await Program.Main(new[] { "--help" });
Assert.Equal(ERROR_SUCCESS, result);
}
// main program
internal class Program {
private const int ERROR_SUCCESS = 0;
internal static async Task<int> Main(string[] args) {
bool hasError = false;
bool helpOrVersionRequested = false;
ParserResult<Options> parsedOptions = Parser.Default.ParseArguments<Options>(args).WithNotParsed(errors => {
helpOrVersionRequested = errors.Any(x => x.Tag == ErrorType.HelpRequestedError || x.Tag == ErrorType.VersionRequestedError);
hasError = true;
});
if (helpOrVersionRequested) {
return ERROR_SUCCESS;
}
// Execute as a normal call
// ...
}
}
// Options
internal class Options {
[Option('c', "connectionString", Required = true, HelpText = Texts.ExplainConnection)]
public string ConnectionString { get; set; }
[Option('j', "jobId", Required = true, HelpText = Texts.ExplainJob)]
public int JobId { get; set; }
[Usage(ApplicationAlias = "Importer.exe")]
public static IEnumerable<Example> Examples {
get => new[] {
new Example(Texts.ExplainExampleExecution, new Options() {
ConnectionString="Server=MyServer;Database=MyDatabase",
JobId = 5
}),
};
}
}
I did a downgrade to version 2.3.0 without any issues. Calling the compiled Program.exe by a command line seems to be working as well. I created that test to ensure my application stops when the version or help is requested only without any additional information.
Metadata
Metadata
Assignees
Labels
No labels