我正在使用CommandLineParser并将示例代码粘贴到我的示例项目中。我收到很多错误,例如:
严重级代码描述项目文件行抑制状态 错误CS0246类型或命名空间名称' DefaultValue'找不到(你错过了使用指令或汇编引用吗?)
严重性代码描述项目文件行抑制状态 错误CS0246类型或命名空间名称' ParserStateAttribute'找不到(你错过了使用指令或汇编引用吗?)
我不包括图书馆或其他什么?我已加入CommandLine
,我已通过nuget https://archive.codeplex.com/?p=commandline
安装了该软件包。
using System;
using CommandLine;
namespace Foo
{
class Program
{
class Options
{
[Option('r', "read", Required = true,
HelpText = "Input file to be processed.")]
public string InputFile { get; set; }
[Option('v', "verbose", DefaultValue = true,
HelpText = "Prints all messages to standard output.")]
public bool Verbose { get; set; }
[ParserState]
public IParserState LastParserState { get; set; }
[HelpOption]
public string GetUsage()
{
return HelpText.AutoBuild(this,
(HelpText current) => HelpText.DefaultParsingErrorsHandler(this, current));
}
}
static void Main(string[] args)
{
var options = new Options();
if (CommandLine.Parser.Default.ParseArguments(args, options))
{
// Values are available here
if (options.Verbose) Console.WriteLine("Filename: {0}", options.InputFile);
}
}
}
}
答案 0 :(得分:0)
似乎DefaultValue
和ParserStateAttribute
不再是API的一部分。查看最新的演示项目,该项目是GitHub repository的一部分。另请查看项目的README.md中的quickstart examples。
答案 1 :(得分:0)
只想添加此选项作为可能正在寻找其他命令行解析库的替代项:RunInfoBuilder
它允许您指定应如何使用对象树来解析命令。有点独特,因为它不使用典型的Attributes标记属性,所有操作都通过代码配置完成。
免责声明:我是图书馆的作者。
让我知道你们是否有任何疑问,非常乐意为您提供帮助!
答案 2 :(得分:0)
我认为 FluentArgs (请参阅:https://github.com/kutoga/FluentArgs)将是解决您的问题的好方法。它已经包含了很好的帮助(默认触发标志:-h
和--help
),并且可读性强。有代码:
using FluentArgs;
using System;
namespace TestApp
{
class Program
{
static void Main(string[] args)
{
FluentArgsBuilder.New()
.DefaultConfigs()
.Parameter("-r", "--read")
.WithDescription("Input file to be processed.")
.IsRequired()
.Flag("-v", "--verbose")
.WithDescription("Prints all messages to standard output.")
.Call(verbose => inputFile =>
{
/* Application code */
if (verbose)
{
Console.WriteLine("Filename: {0}", inputFile);
}
})
.Parse(args);
}
}
}
可能的呼叫:
myapp -r myfile.txt
myapp --read myfile.txt -v
myapp --verbose - myfile.txt