【发布时间】: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.Parser 和 ParseArgumentsStrict 来自 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