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はヘルプ画面もスローします。これもプログラムを終了する必要があります。
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ヘルプの要求は解析の失敗と同等です。間違いなくチェックする価値があります。)