【问题标题】:Command Line Parser missing library includes?命令行解析器缺少库包括?
【发布时间】:2018-03-26 08:51:59
【问题描述】:

我正在使用CommandLineParser 并将示例代码粘贴到我的示例项目中。我收到很多错误,例如:

严重性代码描述项目文件行抑制状态 错误 CS0246 找不到类型或命名空间名称“DefaultValue”(是否缺少 using 指令或程序集引用?)
严重性代码 描述 项目文件行抑制状态 错误 CS0246 找不到类型或命名空间名称“ParserStateAttribute”(您是否缺少 using 指令或程序集引用?)

我不包括图书馆或其他东西吗?我已经包含了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);
            }
        }
    }
}

【问题讨论】:

标签: c# command-line-parser


【解决方案1】:

DefaultValueParserStateAttribute 似乎不再是 API 的一部分。查看最新的演示项目,它是GitHub repository 的一部分。另请查看项目 README.md 中的 quickstart examples

【讨论】:

  • 谢谢,我去看看。这个库是否仍然得到很好的使用和维护,或者你会为 C# 推荐另一个 cmd 行解析器?
  • 虽然 CodePlex 页面已经过时(因为 CodePlex 关闭了),但 GitHub 页面似乎非常活跃且维护良好(即使使用当前的项目组织实践),NuGet 上的下载量说明了就其本身而言,所以我会说该项目是一个非常好的选择:-)。 (nuget.org/packages/commandlineparser)
【解决方案2】:

只是想为那些可能正在寻找其他命令行解析库的人添加它作为替代方案:RunInfoBuilder

它允许您指定如何使用对象树来解析命令。它有点独特,它没有使用典型的Attributes来标记属性,一切都是通过代码配置完成的。

免责声明:我是图书馆的作者。

如果你们有任何问题,请告诉我,非常乐意提供帮助!

【讨论】:

    【解决方案3】:

    我认为 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-08
      • 2014-01-04
      • 2012-05-09
      • 2019-03-23
      • 2021-03-23
      相关资源
      最近更新 更多