0

以下のデフォルト機能は、実行時に実行されませんが、実行すると実行さmyExe.exeれますmyExe.exe -launch。このアプリケーションがデフォルトで実行されない理由について何か考えはありますか? ドキュメントによると、これはうまくいくはずです

ドキュメントからの抜粋:

As a fallback, a default handler may be registered which will handle all arguments which are not handled by any of the above matching algorithms. The default handler is designated by the name <> (which may be an alias for another named NDesk.Options.Option).

私のコード:

public static void Main (string[] args)
{
    bool showHelp = false;
    var options = new OptionSet() {
        {
            "h", "Show help",
            v => showHelp = true
        }, {
            "config", "Reconfigure the launcher with different settings",
            v => PromptConfig()
        }, {
            "v", "Show current version",
            v => ShowVersion()
        }, {
            "launch",
            v => LaunchApplication()
        }, {
            "<>", //default
            v => LaunchApplication()
        }
    };

    //handle arguments
    List<string> extra;
    try {
        extra = options.Parse (args);
    }
    catch (OptionException e) {
        Console.Write("MyApp:");
        Console.WriteLine(e.Message);
        Console.WriteLine("Try `MyApp--help' for more information");
        return;
    }

    if (showHelp) {
        ShowHelp(options);
        return;
    }
}
4

1 に答える 1

1

デフォルトのハンドラーは、特定のハンドラーを提供しなかった引数を処理するように設計されています。

あなたの場合、MyExe.exe処理する引数がないため、実行中にデフォルトのハンドラーを呼び出すべきではありません。次のようなコマンドラインを実行するとMyExe.exe -someUnknownArgument デフォルトのハンドラーが起動するはずです。

とにかく、このParseメソッドの意図は、コマンド ラインを解析し、引数を表す独自のモデルを初期化し、それらに基づいて実行できるようにすることだと思います。

たとえば、コードは次のようになります。

public enum Action
{
    ShowHelp,
    ShowVersion,
    PromptConfig,
    LaunchApplication
}

public static void Main (string[] args)
{
    var action = Action.LaunchApplication;

    var options = new OptionSet() {
        {
            "h", "Show help",
            v => action = Action.ShowHelp
        },
        {
            "config", "Reconfigure the launcher with different settings",
            v => action = Action.PromptConfig
        },
        {
            "v", "Show current version",
            v => action = Action.ShowVersion
        }, 
        {
            "launch",
            v => action = Action.LaunchApplication
        }
    }

    try 
    {
        // parse arguments
        var extra = options.Parse(args);

        // act
        switch (action)
        {
            // ... cases here to do the actual work ...
        }
    }
    catch (OptionException e) 
    {
        Console.WriteLine("MyApp: {0}", e.Message);
        Console.WriteLine("Try `MyApp --help' for more information");
    }
}
于 2012-11-13T23:21:55.807 に答える