Compartir vía


Cómo configurar el analizador en System.CommandLine

El análisis y la invocación son dos pasos independientes, por lo que cada uno de ellos tiene su propia configuración:

Se exponen mediante las ParseResult.Configuration propiedades y ParseResult.InvocationConfiguration . Cuando no se proporcionan, se usan las configuraciones predeterminadas.

ParserConfiguration

EnablePosixBundling

La agrupación de opciones de un solo carácter está habilitada de forma predeterminada, pero puede deshabilitarla estableciendo la propiedad ParserConfiguration.EnablePosixBundling en false.

ResponseFileTokenReplacer

Los archivos de respuesta están habilitados de forma predeterminada, pero puede deshabilitarlos estableciendo la propiedad ResponseFileTokenReplacer en null. También puede proporcionar una implementación personalizada para personalizar cómo se procesan los archivos de respuesta.

El archivo de respuesta puede contener otros nombres de archivo de respuesta, por lo que el análisis podría incluir abrir otros archivos. La biblioteca espera que todos los archivos de respuesta se hayan generado y almacenado por agentes de confianza.

InvocationConfiguration

Salida y error estándar

InvocationConfiguration hace que las pruebas, así como muchos escenarios de extensibilidad, sean más fáciles que usar System.Console. Expone dos TextWriter propiedades: Output y Error. Puede establecer estas propiedades en cualquier instancia TextWriter, como StringWriter, que puede usar para capturar la salida en pruebas.

Defina un comando simple que escriba en la salida estándar:

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

Ahora, use InvocationConfiguration para capturar la salida:

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

ProcessTerminationTimeout

El tiempo de espera de finalización del proceso se puede configurar a través de la ProcessTerminationTimeout propiedad . El valor predeterminado es de 2 segundos.

HabilitarManejadorDeExcepcionesPredeterminado

De forma predeterminada, se detectan y notifican al usuario todas las excepciones no controladas durante la invocación de un comando. Puede deshabilitar este comportamiento configurando la propiedad EnableDefaultExceptionHandler a false. Esto resulta útil cuando desea controlar excepciones de forma personalizada, como registrarlas o proporcionar una experiencia de usuario diferente.

Clases derivadas

InvocationConfiguration no está sellado, por lo que puede derivar de él para agregar propiedades o métodos personalizados. Esto resulta útil cuando desea proporcionar opciones de configuración adicionales específicas de la aplicación.

Consulte también