我有这两个属性:
[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;
}
});
答案 0 :(得分:0)
所以它看起来像是CommandLine Parser Nuget中的一个错误。
我最终通过删除:
来解决它_.IgnoreUnknownArguments = true;
所以现在它看起来像:
new Parser(
_ =>
{
_.CaseSensitive = false;
_.HelpWriter = helpWriter;
})...
并添加了一个帮助方法,然后清除了我不想解析的未知参数(对我来说,他们不是以&#34; - &#34;语法开头):< / p>
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);
}
}
现在,如果用户使用&#34; - &#34;输入意外值语法比它还好,否则没有。