9

私は、C# コンソール アプリケーションである .NET Framework 4.0 で NuGet 経由で取得したコマンド ライン パーサー ライブラリを使用しています。

これが私のオプションクラスです...

class Options
{
    [Option('p', "prompt", DefaultValue = true, HelpText = "Prompt the user before exiting the program.")]
    public bool PromptForExit { get; set; }

    [HelpOption]
    public string GetUsage()
    {
        return HelpText.AutoBuild(this, (HelpText current) => HelpText.DefaultParsingErrorsHandler(this, current));
    }
}

ここで、オプションを解析して使用します...

static void Main(string[] args)
{
    Options options = new Options();
    if (CommandLine.Parser.Default.ParseArguments(args, options))
    {
        if (options.PromptForExit)
        {
            Console.WriteLine("Press any key to exit.");
            Console.ReadKey();
        }
    }
}

終了する前にプロンプ​​トが表示されないようにするために、あらゆる種類のコマンドを試しましたが、どれも機能しません。誰かがこのライブラリに精通しているか、コマンドラインから PromptForExit オプションを false にする方法を知っていますか?

これが私が試したことです。

myprogram.exe
myprogram.exe -p false
myprogram.exe -p False
myprogram.exe -p FALSE
myprogram.exe -p 0
myprogram.exe --prompt false
myprogram.exe --prompt False
myprogram.exe --prompt FALSE
myprogram.exe --prompt 0
4

3 に答える 3

2

ライブラリは、DefaultValue が True のブール値を適切にサポートしていないようです。だから私は自分のプログラムをそのように修正しました...

class Options
{
    [Option('p', "do-not-prompt", DefaultValue = false, HelpText = "Do not prompt the user before exiting the program.")]
    public bool DoNotPromptForExit { get; set; }

    [HelpOption]
    public string GetUsage()
    {
        return HelpText.AutoBuild(this, (HelpText current) => HelpText.DefaultParsingErrorsHandler(this, current));
    }
}


static void Main(string[] args)
{
    Options options = new Options();
    if (CommandLine.Parser.Default.ParseArguments(args, options))
    {
        if (!options.DoNotPromptForExit)
        {
            Console.WriteLine("Press any key to exit.");
            Console.ReadKey();
        }
    }
}

これは醜い解決策だと思うので、誰かがより良い解決策を提示してくれたら、それを受け入れます。

于 2014-04-02T15:15:11.363 に答える
1

ブール値のアプローチがうまくいかないのは残念です。回避策として YesNo-enum を使用しました。それが役立つことを願っています。

class Options
{
    public enum YesNo
    {
       Yes,
       No
    }

    [Option('p', "prompt", DefaultValue = YesNo.Yes, HelpText = "Prompt the user before exiting the program. (Yes/No)")]
    public YesNo PromptForExit { get; set; }
}
于 2016-12-16T07:59:19.217 に答える