Настройка средства синтаксического анализа в System.CommandLine

Синтаксический анализ и вызов являются двумя отдельными шагами, поэтому каждая из них имеет собственную конфигурацию:

Они предоставляются свойствами и ParseResult.Configuration свойствамиParseResult.InvocationConfiguration. Если они не указаны, используются конфигурации по умолчанию.

ParserConfiguration

Включить POSIX-пакетирование

Объединение односимвольных параметров включено по умолчанию, но его можно отключить, установив для свойства ParserConfiguration.EnablePosixBundling значение false.

Заменитель токенов в файле ответа

Файлы ответа включены по умолчанию, но их можно отключить, изменив значение свойства на ResponseFileTokenReplacernull. Вы также можете предоставить пользовательскую реализацию для настройки обработки файлов ответов.

Файл ответа может содержать другие имена файлов ответа, поэтому синтаксический анализ может включать открытие других файлов. Библиотека ожидает, что все файлы ответов были созданы и сохранены надежными агентами.

InvocationConfiguration

Стандартные выходные данные и ошибки

InvocationConfiguration делает тестирование, а также множество сценариев расширяемости, проще, чем использование System.Console. Он предоставляет два TextWriter свойства: Output и Error. Эти свойства можно задать для любого TextWriter экземпляра, например StringWriterэкземпляра, который можно использовать для записи выходных данных для тестирования.

Определите простую команду, которая записывает данные в стандартные выходные данные:

Option<FileInfo?> fileOption = new("--file")
{
    Description = "An option whose argument is parsed as a FileInfo"
};

RootCommand rootCommand = new("Configuration sample")
{
    fileOption
};

rootCommand.SetAction((parseResult) =>
{
    FileInfo? fileOptionValue = parseResult.GetValue(fileOption);
    parseResult.InvocationConfiguration.Output.WriteLine(
        $"File option value: {fileOptionValue?.FullName}"
        );
});

Теперь используйте InvocationConfiguration для записи выходных данных:

StringWriter output = new();
rootCommand.Parse("-h").Invoke(new() { Output = output });
Debug.Assert(output.ToString().Contains("Configuration sample"));

Тайм-аут завершения процесса

Время ожидания завершения процесса можно настроить с помощью ProcessTerminationTimeout свойства. Значение по умолчанию — 2 секунды.

ВключитьОбработчикИсключенийПоУмолчанию

По умолчанию все необработанные исключения, создаваемые во время вызова команды, перехватываются и передаются пользователю. Можно отключить это поведение, установив свойство EnableDefaultExceptionHandler как false. Это полезно, если требуется обрабатывать исключения пользовательским способом, например ведение журнала или предоставление другого взаимодействия с пользователем.

Производные классы

InvocationConfiguration не запечатан, поэтому его можно наследовать, чтобы добавить пользовательские свойства или методы. Это полезно, если требуется предоставить дополнительные параметры конфигурации, относящиеся к приложению.

См. также