2

我有这两个属性:

[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

Update1:​​看起来它与设置“_.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;
                    }
                });
4

1 回答 1

2

所以它看起来像是命令行解析器 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);
    }
}

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

于 2016-03-08T11:56:04.950 回答