这个问题是关于一个类的一起工作在.net核心中提供丰富的命令行解析经验。主要班级是CommandLineApplication。 This是一篇走过主要设施的文章。
这就是配置显示自动生成帮助的帮助选项的方法。
cla.HelpOption("-? | -h | --help");
如果在命令行的任何地方找到帮助选项,我希望我的应用程序终止,而不是继续运行。但我找不到实现这个目标的好方法。我当然可以自己解析这些论点,以确定是否指定了该选项,但这不是这个工具的全部要点吗?
以下是我使用的示例代码:
public class Config
{
public string Option1 {get; set;}
}
public class CommandLine
{
public static void ApplyCommandLineArguments(string[] args, Config config)
{
CommandLineApplication cla = new CommandLineApplication(false);
CommandOption option1 = cla.Option(
"-o | --option1",
"Set this option to specify option1",
CommandOptionType.SingleValue
);
cla.HelpOption("-? | -h | --help");
cla.OnExecute(() =>
{
if (option1.HasValue())
{
config.Option1 = option1.Value();
}
return 0;
});
try
{
cla.Execute(args);
}
catch (CommandParsingException ex)
{
Console.WriteLine(ex.Message);
cla.ShowHelp();
}
}
}
然后在Main
方法中:
Config config = new Config();
CommandLine.ApplyCommandLineArguments(args, config);
// I want to exit here if user specified the help option anywhere on the command line.
Console.WriteLine("Hello World!");
答案 0 :(得分:2)
如果找到了帮助选项,则cla.Execute
实际上不会运行您的OnExecute
回调,只会返回0.您可以通过从OnExecute
回调中返回非零值来使用它,像这样:
public class CommandLine
{
// returns true if parse was successful and you can proceed. Returns false if you can terminate
public static bool ApplyCommandLineArguments(string[] args, Config config)
{
CommandLineApplication cla = new CommandLineApplication(false);
CommandOption option1 = cla.Option(
"-o | --option1",
"Set this option to specify option1",
CommandOptionType.SingleValue
);
cla.HelpOption("-? | -h | --help");
cla.OnExecute(() =>
{
if (option1.HasValue()) {
config.Option1 = option1.Value();
}
// non-zero value
return 1;
});
try {
int result = cla.Execute(args);
// check result
return result > 0;
}
catch (CommandParsingException ex) {
Console.WriteLine(ex.Message);
cla.ShowHelp();
return false;
}
}
}
public static void Main(string[] args)
{
Config config = new Config();
if (!CommandLine.ApplyCommandLineArguments(args, config)) {
return;
}
// I want to exit here if user specified the help option anywhere on the command line.
Console.WriteLine("Hello World!");
Console.ReadKey();
}