Partage via


Comment configurer l’analyseur dans System.CommandLine

L’analyse et l’appel sont deux étapes distinctes. Chacun d’eux a donc sa propre configuration :

Elles sont exposées par les propriétés et ParseResult.Configuration les ParseResult.InvocationConfiguration propriétés. Lorsqu’elles ne sont pas fournies, les configurations par défaut sont utilisées.

ParserConfiguration

EnablePosixBundling

Le regroupement d’options à caractère unique est activé par défaut, mais vous pouvez le désactiver en définissant la propriété ParserConfiguration.EnablePosixBundling à false.

ResponseFileTokenReplacer

Les fichiers de réponse sont activés par défaut, mais vous pouvez les désactiver en définissant la propriété ResponseFileTokenReplacer à null. Vous pouvez également fournir une implémentation personnalisée pour personnaliser le traitement des fichiers de réponse.

Le fichier réponse peut contenir d’autres noms de fichiers de réponse. Par conséquent, l’analyse peut inclure l’ouverture d’autres fichiers. La bibliothèque s’attend à ce que tous les fichiers de réponse aient été générés et stockés par des agents fiables.

InvocationConfiguration

Sortie et erreur standard

InvocationConfiguration rend les tests, ainsi que de nombreux scénarios d’extensibilité, plus faciles que l’utilisation System.Console. Il expose deux TextWriter propriétés : Output et Error. Vous pouvez définir ces propriétés sur n’importe quelle TextWriter instance, telle qu’un StringWriter, que vous pouvez utiliser pour capturer la sortie pour les tests.

Définissez une commande simple qui écrit dans une sortie 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}"
        );
});

À présent, utilisez cette option InvocationConfiguration pour capturer la sortie :

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

DélaiD'arrêtDeProcessus

Le délai d’expiration du processus peut être configuré via la ProcessTerminationTimeout propriété. La valeur par défaut est de 2 secondes.

EnableDefaultExceptionHandler

Par défaut, toutes les exceptions non gérées levées pendant l’appel d’une commande sont interceptées et signalées à l’utilisateur. Vous pouvez désactiver ce comportement en définissant la EnableDefaultExceptionHandler propriété sur false. Cela est utile lorsque vous souhaitez gérer des exceptions d’une manière personnalisée, comme les journaliser ou fournir une expérience utilisateur différente.

Classes dérivées

InvocationConfiguration n’est pas scellé. Vous pouvez donc en dériver pour ajouter des propriétés ou des méthodes personnalisées. Cela est utile lorsque vous souhaitez fournir des options de configuration supplémentaires spécifiques à votre application.

Voir aussi