1

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

3 回答 3

2

它似乎DefaultValue并且ParserStateAttribute不再是 API 的一部分。查看最新的演示项目,它是GitHub 存储库的一部分。还可以查看项目 README.md 中的快速入门示例

于 2018-03-26T08:57:56.477 回答
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
  • 等等
于 2019-10-19T06:53:55.977 回答
0

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

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

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

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

于 2018-10-29T23:16:57.110 回答