共用方式為


如何在System.CommandLine中設定剖析器

剖析和呼叫是兩個獨立的步驟,因此每個步驟都有自己的設定:

它們由 和 ParseResult.ConfigurationParseResult.InvocationConfiguration 屬性公開。 如果未提供它們,則會使用預設設定。

剖析器配置

EnablePosixBundling(啟用Posix打包)

預設會啟用單一字元選項的綁定,但您可以將屬性設定為ParserConfiguration.EnablePosixBundlingfalse來停用它。

ResponseFileTokenReplacer

默認會啟用回應檔,但您可以將 屬性設定ResponseFileTokenReplacernull來停用它們。 您也可以提供自定義實作,以自定義回應檔的處理方式。

回應檔案可以包含其他回應檔名稱,因此剖析可能包括開啟其他檔案。 程式庫預期所有回應檔都是由可信任的代理程式產生及儲存。

InvocationConfiguration

標準輸出和錯誤

InvocationConfiguration 讓測試以及許多擴充性案例都比使用 System.Console更容易。 它會公開兩個 TextWriter 屬性: OutputError。 您可以將這些屬性設定為任何 TextWriter 實例,例如 StringWriter,可用來擷取輸出以進行測試。

定義寫入標準輸出的簡單命令:

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 來擷取輸出:

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

ProcessTerminationTimeout(程序終止超時)

進程終止逾時 可以透過 ProcessTerminationTimeout 屬性進行設定。 預設值為2秒。

啟用預設異常處理程序

根據預設,在命令調用期間擲回的所有未處理的例外狀況都會攔截並回報給使用者。 您可以透過設定 EnableDefaultExceptionHandler 屬性為 false 來停用此行為。 當您想要以自定義方式處理例外狀況,例如記錄例外狀況或提供不同的用戶體驗時,這會很有用。

衍生類別

InvocationConfiguration 未密封,因此您可以衍生自它,以新增自定義屬性或方法。 當您想要提供應用程式特定的其他組態選項時,這會很有用。

另請參閱