web-dev-qa-db-ja.com

C#CommandLineParser--印刷して停止するのに役立ちます

CommandLineParser を使用してcmdからいくつかの引数を取得するC#コンソールアプリを構築しています。

ライブラリには、受け入れられた各パラメーターに関するヘルプ情報を表示するための--help(またはhelp動詞)がデフォルトですでに付属しています。

--helpコマンドを実行すると、ヘルプ画面が表示されますが、プログラムは続行されますが、他のデフォルトパラメータが設定されていないため、プログラムが中断します。

コードは次のようになります。

class Options
{
    [Option('f', "force", Required = false, Default = false,
        HelpText = "Force ....")]
    public bool Force { get; set; }

    [Option('v', "version", Required = false, Default = "",
        HelpText =
            "....")]
    public string Version { get; set; }

    [Option('s', "silent", Required = false, Default = false, HelpText = "Disables output ...")]
    public bool Output { get; set; }

    [Option('p', "path", Required = false, Default = "../some/dir/",
        HelpText =
            "Specifies the path ...")]
    public string StartPath { get; set; }
}

次に、プログラムで:

static int Main(string[] args)
{

    try
    {

        var opts = new Options();

        Parser.Default.ParseArguments<Options>(args).WithParsed(parsed => opts = parsed);

        string version = opts.Version;

        PATCH_LOCATION = opts.StartPath;

        ....

そのため、ヘルプ画面が表示された後、プログラムは実行を続けます(opts.StarPathが設定されていないために中断し、他のデフォルトも設定されていません)。

「help」コマンドを受け取ったときにプログラムを「終了」する方法はありますか?

注:不明なパラメーターが使用された場合、CommandLineParserはヘルプ画面もスローします。これもプログラムを終了する必要があります。

8
Fede E.

ParseResultによって返されるWithParsedを確認する必要があります。

var result = Parser.Default
    .ParseArguments<Options>(args)
    .WithParsed(parsed => opts = parsed);
if (result.Tag == ParserResultType.NotParsed)
{
    // Help text requested, or parsing failed. Exit.
    return 1;
}

(I believeヘルプの要求は解析の失敗と同等です。間違いなくチェックする価値があります。)

16
Jon Skeet