Compartilhar via


Como configurar o analisador em System.CommandLine

A análise e a invocação são duas etapas separadas, portanto, cada uma delas tem sua própria configuração:

Eles são expostos pelas propriedades e ParseResult.Configuration pelas ParseResult.InvocationConfiguration propriedades. Quando elas não são fornecidas, as configurações padrão são usadas.

ParserConfiguration

EnablePosixBundling

O agrupamento de opções de caractere único é habilitado por padrão, mas você pode desabilitá-lo definindo a ParserConfiguration.EnablePosixBundling propriedade como false.

ResponseFileTokenReplacer

Os arquivos de resposta são habilitados por padrão, mas você pode desabilitá-los definindo a ResponseFileTokenReplacer propriedade como null. Você também pode fornecer uma implementação personalizada para personalizar como os arquivos de resposta são processados.

O arquivo de resposta pode conter outros nomes de arquivo de resposta, portanto, a análise pode incluir a abertura de outros arquivos. A biblioteca espera que todos os arquivos de resposta sejam gerados e armazenados por agentes confiáveis.

InvocationConfiguration

Saída e erro padrão

InvocationConfiguration torna o teste, bem como muitos cenários de extensibilidade, mais fácil do que usar System.Console. Ele expõe duas TextWriter propriedades: Output e Error. Você pode definir essas propriedades para qualquer TextWriter instância, como uma StringWriter, que você pode usar para capturar a saída para teste.

Defina um comando simples que grava na saída padrão:

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}"
        );
});

Agora, use InvocationConfiguration para capturar a saída:

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

ProcessTerminationTimeout

O tempo limite de término do processo pode ser configurado por meio da ProcessTerminationTimeout propriedade. O valor padrão é 2 segundos.

EnableDefaultExceptionHandler

Por padrão, todas as exceções sem tratamento geradas durante a invocação de um comando são capturadas e relatadas ao usuário. Você pode desabilitar esse comportamento definindo a EnableDefaultExceptionHandler propriedade como false. Isso é útil quando você quer lidar com exceções de maneira personalizada, como fazer o registro no log ou proporcionar uma experiência de usuário diferente.

Classes derivadas

InvocationConfiguration não está lacrado, portanto, você pode derivar dele para adicionar propriedades ou métodos personalizados. Isso é útil quando você deseja fornecer opções de configuração adicionais específicas ao seu aplicativo.

Consulte também