Condividi tramite


Come configurare il parser in System.CommandLine

L'analisi e la chiamata sono due passaggi separati, quindi ognuno ha la propria configurazione:

Vengono esposti dalle ParseResult.Configuration proprietà e ParseResult.InvocationConfiguration . Quando non vengono fornite, vengono usate le configurazioni predefinite.

ParserConfiguration

AbilitaPosixBundling

L'aggregazione di opzioni a carattere singolo è abilitata per impostazione predefinita, ma è possibile disabilitarla impostando la ParserConfiguration.EnablePosixBundling proprietà su false.

ResponseFileTokenReplacer

I file di risposta sono abilitati per impostazione predefinita, ma è possibile disabilitarli impostando la ResponseFileTokenReplacer proprietà su null. È anche possibile fornire un'implementazione personalizzata per personalizzare la modalità di elaborazione dei file di risposta.

Il file di risposta può contenere altri nomi di file di risposta, pertanto l'analisi può includere l'apertura di altri file. La libreria prevede che tutti i file di risposta siano stati generati e archiviati da agenti attendibili.

ChiamatationConfiguration

Output e errore standard

InvocationConfiguration rende il test, oltre a molti scenari di estendibilità, più semplice rispetto all'uso di System.Console. Espone due TextWriter proprietà: Output e Error. È possibile impostare queste proprietà su qualsiasi TextWriter istanza, ad esempio StringWriter, che è possibile usare per acquisire l'output per il test.

Definire un semplice comando che scrive nell'output standard:

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 Usare ora per acquisire l'output:

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

ProcessTerminationTimeout

Il timeout di terminazione del processo può essere configurato tramite la ProcessTerminationTimeout proprietà . Il valore predefinito è 2 secondi.

AbilitaGestoreEccezioniPredefinito

Per impostazione predefinita, tutte le eccezioni non gestite generate durante la chiamata di un comando vengono intercettate e segnalate all'utente. È possibile disabilitare questo comportamento impostando la EnableDefaultExceptionHandler proprietà su false. Ciò è utile quando si desidera gestire le eccezioni in modo personalizzato, ad esempio registrarle o offrire un'esperienza utente diversa.

Classi derivate

InvocationConfiguration non è sigillato, quindi puoi derivare da esso per aggiungere proprietà o metodi personalizzati. Ciò è utile quando si desidera fornire opzioni di configurazione aggiuntive specifiche per l'applicazione.

Vedere anche