#c# #command-line-arguments
#c# #аргументы командной строки
Вопрос:
Я создал небольшой проект, который использует библиотеку CommandLineParser.
Я взял небольшой фрагмент кода из руководства по C # Quick Start:
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!");
}
});
}
}
}
Я могу запустить программу через command promt с
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. По-видимому, это должно быть
bool?
(Nullable<bool>
), чтобы работать так, как вы ожидаете
Ответ №1:
Логические параметры командной строки не принимают параметров (т. Е. true / false); вы либо включаете их, либо нет. Поэтому параметр true / false в конце вашей командной строки игнорируется. Подробный вывод включается, когда анализатор видит параметр -v, и отключается, когда вы опускаете -v из командной строки.
Возвращаясь к документации, вам следует рассмотреть возможность обработки нераспределенных параметров рекомендуемым способом:
.WithNotParsed<Options>((errs) => HandleParseError(errs));
… который сообщил бы вам, что ваши параметры true / false игнорировались.