Delen via


De parser configureren in System.CommandLine

Parseren en aanroepen zijn twee afzonderlijke stappen, dus elk van deze stappen heeft een eigen configuratie:

Ze worden weergegeven door de ParseResult.Configuration en ParseResult.InvocationConfiguration eigenschappen. Wanneer ze niet worden opgegeven, worden de standaardconfiguraties gebruikt.

ParserConfiguration

EnablePosixBundling

Het bundelen van opties met één teken is standaard ingeschakeld, maar u kunt deze uitschakelen door de ParserConfiguration.EnablePosixBundling eigenschap in te stellen op false.

Antwoordbestandtokenvervanger

Antwoordbestanden zijn standaard ingeschakeld, maar u kunt ze uitschakelen door de ResponseFileTokenReplacer eigenschap in te stellen op null. U kunt ook een aangepaste implementatie bieden om aan te passen hoe antwoordbestanden worden verwerkt.

Het antwoordbestand kan andere namen van het antwoordbestand bevatten, dus parseren kan het openen van andere bestanden omvatten. De bibliotheek verwacht dat alle antwoordbestanden zijn gegenereerd en opgeslagen door betrouwbare agents.

InvocationConfiguration

Standaarduitvoer en -fout

InvocationConfiguration maakt testen, evenals veel uitbreidbaarheidsscenario's, eenvoudiger dan het gebruik ervan System.Console. Er worden twee TextWriter eigenschappen weergegeven: Output en Error. U kunt deze eigenschappen instellen op elk TextWriter exemplaar, zoals een StringWriter, dat u kunt gebruiken om uitvoer vast te leggen voor testen.

Definieer een eenvoudige opdracht die naar standaarduitvoer schrijft:

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 Gebruik nu om de uitvoer vast te leggen:

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

Procesbeëindigingstijdslimiet

Time-out voor procesbeëindiging kan worden geconfigureerd via de ProcessTerminationTimeout eigenschap. De standaardwaarde is 2 seconden.

EnableDefaultExceptionHandler

Standaard worden alle onverwerkte uitzonderingen die tijdens het aanroepen van een commando worden gegenereerd, opgevangen en gerapporteerd aan de gebruiker. U kunt dit gedrag uitschakelen door de EnableDefaultExceptionHandler eigenschap in te stellen op false. Dit is handig als u uitzonderingen op een aangepaste manier wilt afhandelen, zoals het vastleggen van uitzonderingen of het bieden van een andere gebruikerservaring.

Afgeleide klassen

InvocationConfiguration is niet verzegeld, zodat u ervan kan afleiden om extra eigenschappen of methoden toe te voegen. Dit is handig als u aanvullende configuratieopties wilt opgeven die specifiek zijn voor uw toepassing.

Zie ook