【问题标题】:Nuget Command Line Parser Library 1.9.74 library exiting with code 0x01 [closed]Nuget 命令行解析器库 1.9.74 库以代码 0x01 退出 [关闭]
【发布时间】:2017-04-22 18:19:50
【问题描述】:

我有一个 C# 命令行程序意外地以以下消息结尾:The program '[2072] csgrep.exe' has exited with code 1 (0x1)

缩短代码如下:

static void Main(string[] args)
{
    try
    {
        var parser = new CommandLine.Parser(s =>
        {
            s.CaseSensitive = true;
        });

        // the application unexpectedly stops when calling this method.
        var isValid = parser.ParseArgumentsStrict(args, options);

        if (isValid)
        {
            ... run my application here
        }
        else
        {
            Console.WriteLine("Input error.");
        }
    }
    catch(Exception ex)
    {
        Console.WriteLine("Error: " + ex.Message);
    }
}

CommandLine.ParserParseArgumentsStrict 来自 nuget 包“Command Line Parser Library1.9.74”(https://www.nuget.org/packages/CommandLineParser19/

当我使用调试器“进入”时,应用程序停止在var isValid = parser.ParseArgumentsStrict(args, options);

我的问题是我真的不知道如何解决问题。我怎样才能找出问题出在哪里?

【问题讨论】:

  • 来自文档,ParseArgumentsStrict:成功或退出。所以你的答案是它失败了,所以它退出了。 github.com/gsscoder/commandline/wiki/Best-Practices
  • 你传递的选项和参数是什么。您能否分享这些值,否则无法说明 grep 失败的原因。
  • Rafalon:谢谢你让我走上了正轨。傻我!我从来没有想过检查 nuget 包的源代码。从消息来源可以清楚地看出,如果没有OnFail 操作传递给ParseArgumentsStrict 方法,那么它将立即退出。我通过为方法提供OnFail 参数来修复它,然后它的行为符合预期。
  • loneshark99:没关系,不管我是不带参数调用还是带参数调用,还是会失败。
  • 与此同时,我认为var parser = new CommandLine.Parser(s => { s.CaseSensitive = true; }); 可能是导致问题的原因。使用库提供的默认静态解析器 (var parser = CommandLine.Parser.Default;) 可以正常工作,尽管它不区分大小写,这不是我想要的。

标签: c# .net debugging command-line


【解决方案1】:

代码可以修改如下,以免代码1意外退出:

static void OnCommandLineParseFail()
{
    Console.WriteLine("Command line parse failure");

    Console.WriteLine("Help: " + parser.Settings.HelpWriter.ToString());
}

static void Main(string[] args)
{
    try
    {
        StringWriter t = new StringWriter();

        var parser = new CommandLine.Parser(s =>
        {
            s.CaseSensitive = true;
            s.HelpWriter = t;
            s.IgnoreUnknownArguments = false;
        });

        var isValid = parser.ParseArgumentsStrict(args, options, OnCommandLineParseFail);

        if (isValid)
        {
            ... run my application here
        }
        else
        {
            Console.WriteLine("Input error.");
        }
    }
    catch(Exception ex)
    {
        Console.WriteLine("Error: " + ex.Message);
    }
}

【讨论】:

    猜你喜欢
    • 2017-03-04
    • 2018-01-22
    • 2011-08-04
    • 2015-09-17
    • 1970-01-01
    • 2014-05-08
    • 1970-01-01
    • 2014-01-04
    • 1970-01-01
    相关资源
    最近更新 更多