C# Nuget命令行解析器库1.9.74库退出,代码为0x01

C# Nuget命令行解析器库1.9.74库退出,代码为0x01,c#,.net,debugging,command-line,C#,.net,Debugging,Command Line,我有一个C#命令行程序,它意外地以消息结尾:程序“[2072]csgrep.exe”已退出,代码为1(0x1) 简称代码如下: static void Main(string[] args) { try { var parser = new CommandLine.Parser(s => { s.CaseSensitive = true; }); // the application

我有一个C#命令行程序,它意外地以消息结尾:
程序“[2072]csgrep.exe”已退出,代码为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.Parser
parseArgumentsStrit
来自nuget包“命令行解析器库1.9.74”()

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


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

可按如下方式更改代码,以避免代码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);
    }
}

从文档中,parseArgumentsStrit:成功或退出。所以你的答案是它失败了,所以它退出了。您传递的选项和参数是什么。你能分享一下这些价值观吗,否则就无法解释为什么grep会失败。拉斐隆:谢谢,这让我走上了正确的道路。我真傻!我从来没有想过要检查nuget包的源代码。从消息来源可以清楚地看出,如果没有
OnFail
操作被传递到
ParseArgumentsStrict
方法,那么它将立即退出。我通过向方法提供一个
OnFail
参数来修复它,然后它按照预期的方式运行。loneshark99:这并不重要,无论我是在没有参数或任何参数的情况下调用它,它都会失败。与此同时,我认为
var parser=new CommandLine.parser(s=>{s.CaseSensitive=true;});
可能是造成问题的原因。使用库提供的默认静态解析器(
var parser=CommandLine.parser.default;
)可以很好地工作,尽管它不区分大小写,这不是我想要的。