CommandLineParser - значение не меняется - PullRequest
3 голосов
/ 20 марта 2019

Я создал небольшой проект, в котором используется библиотека CommandLineParser .

Я взял небольшой фрагмент кода из руководства C # Быстрый старт :

using System;
using CommandLine;

namespace QuickStart
{
    class Program
    {
        public class Options
        {
            [Option('v', "verbose", Required = false, HelpText = "Set output to verbose messages.")]
            public bool Verbose { get; set; }
        }

        static void Main(string[] args)
        {
            Parser.Default.ParseArguments<Options>(args)
                   .WithParsed<Options>(o =>
                   {
                       if (o.Verbose)
                       {
                           Console.WriteLine($"Verbose output enabled. Current Arguments: -v {o.Verbose}");
                           Console.WriteLine("Quick Start Example! App is in Verbose mode!");
                       }
                       else
                       {
                           Console.WriteLine($"Current Arguments: -v {o.Verbose}");
                           Console.WriteLine("Quick Start Example!");
                       }
               });
        }
    }
}

Я могу запустить программу через командную строку с

dotnet CommandLineParserTestProject.dll

Вывод соответствует ожидаемому:

Current Arguments: -v False
Quick Start Example!

Когда я тогда поставлю:

dotnet CommandLineParserTestProject.dll -v true

Выход снова, как и ожидалось:

Verbose output enabled. Current Arguments: -v True
Quick Start Example! App is in Verbose mode!

Теперь проблема:

После этих двух команд сверху я ввожу:

dotnet CommandLineParserTestProject.dll -v false

но результат все равно:

Verbose output enabled. Current Arguments: -v True
Quick Start Example! App is in Verbose mode!

Только когда я ввожу dotnet CommandLineParserTestProject.dll false, оно меняется, dotnet CommandLineParserTestProject.dll -v false, похоже, не работает.

Кто-нибудь знает, почему это происходит?

1 Ответ

2 голосов
/ 20 марта 2019

Параметры логической командной строки не принимают параметры (т. Е. Истина / ложь);вы либо включаете их, либо нет.Поэтому параметр true / false в конце вашей командной строки игнорируется.Подробный вывод включается, когда синтаксический анализатор видит параметр -v, и отключается, когда вы опускаете -v в командной строке.

Возвращаясь к документации, вам следует рассмотреть обработку необработанных параметров рекомендованным способом.:

.WithNotParsed<Options>((errs) => HandleParseError(errs));

... что сообщило бы вам, что ваши параметры true / false игнорируются.

...