【问题标题】:Assigning the same value to 2 different Properties using CommandLine Parser nuget C#使用命令行解析器 nuget C# 将相同的值分配给 2 个不同的属性
【发布时间】:2016-03-06 17:04:26
【问题描述】:

我有这两个属性:

[Option("IpAddress1")]
public string IpAddress1 { get; set; }
[Option("IpAddress2")]
public string IpAddress2 { get; set; }

当使用这些参数运行时:

--IpAddress1 "1.1.1.1" --IpAddress2" 1.1.1.1"

我收到“MissingValueOptionError”。

运行时:

--IpAddress1 "1.1.1.1" --IpAddress2 "1.1.1.2"

一切正常。

知道为什么吗?

CommandLineParser nuget: https://github.com/gsscoder/commandline

更新1: 看起来它与设置“_.IgnoreUnknownArguments = true;”有关

new Parser(
            _ =>
            {
                _.CaseSensitive = false;
                _.HelpWriter = helpWriter;
                _.IgnoreUnknownArguments = true;
            }).
            ParseArguments<T>(commandLineArguments).
            WithParsed(_ => parsedFromCommandLineArguments = _).
            WithNotParsed(
                _ =>
                {
                    parseSucceeded = false;
                    if (_.Any(
                        __ => __.Tag == ErrorType.HelpRequestedError ||
                              __.Tag == ErrorType.HelpVerbRequestedError))
                    {
                        isHelpRequestedDetected = true;
                    }
                });

【问题讨论】:

  • 语法不应该是--IpAddress1 "1.1.1.1" --IpAddress2 "1.1.1.2"吗?
  • 你说得对。我改变了它。它的行为仍然相同。我还尝试了其他字符串(例如“aaa”“aaa”与“aaa”“aab”),它的行为仍然相同。
  • 用更具体的东西更新了这个问题。看起来它与设置 IgnoreUnknownArguments 属性有关。

标签: c# command-line command-line-parser


【解决方案1】:

所以它看起来像是 CommandLine Parser Nuget 中的一个错误。

我最终通过删除:

_.IgnoreUnknownArguments = true;

所以现在看起来像:

new Parser(
        _ =>
        {
            _.CaseSensitive = false;
            _.HelpWriter = helpWriter;
        })...

并在此之前添加了一个辅助方法来清除我不想被解析的未知参数(对我来说,它们不是以“--”语法开头的参数):

var filteredCommandLineArguments = new List<string>();
var isValueExpected = false;
foreach (var commandLineArgument in commandLineArguments)
{
    if (isValueExpected)
    {
       isValueExpected = false;
       filteredCommandLineArguments.Add(commandLineArgument);
       continue;
    }
    if (commandLineArgument.StartsWith("--"))
    {
       isValueExpected = true;
       filteredCommandLineArguments.Add(commandLineArgument);
    }
}

现在,如果用户使用“--”语法输入了一个意外的值,则可以,否则不行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-24
    • 1970-01-01
    • 2019-05-02
    • 2015-12-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多