命令行解析器缺少库包括?

时间:2018-03-26 08:51:59

标签: c# command-line-parser

我正在使用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);
            }
        }
    }
}

3 个答案:

答案 0 :(得分:0)

似乎DefaultValueParserStateAttribute不再是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