У меня есть консольное приложение, которое использует System.CommandLine для анализа аргументов и параметров.
Чтобы иметь возможность лучше справляться с исключениями, я переключился с RootCommand.Invoke(args) на использование CommandLineBuilder следующим образом:
CommandLineBuilder oCLB = new(oRootCmd);
oCLB.UseExceptionHandler((e, c) => LogExceptionAndRaiseEvent(e));
Parser oPrs = oCLB.Build();
int iRC = oPrs.Invoke(p_StartupArgs);
Теперь я заметил, что этот способ вызова больше не пишет в консоль, ни при ошибке синтаксического анализа, ни при вызове с переключателем справки по умолчанию «-h».
Я подозреваю, что это связано со вторым параметром в Invoke, который может быть IConsole (и по умолчанию имеет значение NULL), но я не имею реальной подсказки и не знаю, что туда передать.
ОБНОВЛЕНИЕ: см. решение ниже, используя некоторые параметры конфигурации CommandLineBuilder.
Спасибо за предложение, но добавление этого в виде int iRC = oPrs.Invoke(p_StartupArgs, new SystemConsole());, к сожалению, также не имеет никакого эффекта, @Hans





Обновление, решение заключалось в добавлении еще одной конфигурации «Использовать» в CommandLineBuilder:
CommandLineBuilder oCLB = new(oRootCmd);
oCLB.UseHelp().
UseVersionOption().
UseParseErrorReporting();
oCLB.UseExceptionHandler((e, c) => BygLog.LogExceptionAndRaiseEvent(e));
Parser oPrs = oCLB.Build();
int iRC = oPrs.Invoke(p_StartupArgs, new SystemConsole());
Согласно https://github.com/dotnet/command-line-api/issues/2188
Обновляйте свой вопрос каждый раз, когда хотите добавить новую информацию
learn.microsoft.com/en-us/dotnet/api/…