我尝试将一个布尔参数传递给控制台应用程序,并使用命令行解析器库处理该值.
[Option('c', "closeWindow", Required = true, HelpText = "Close the window.")]
public bool CloseWindow { get; set; }
Run Code Online (Sandbox Code Playgroud)
我试图将参数传递为
-c false
-c False
-c "false"
-...
Run Code Online (Sandbox Code Playgroud)
没有差异,每次尝试我得到"true"的价值.
任何人都可以告诉我如何传递参数来获取布尔false值?
为了避免可能的问题,有一个正确传递的字符串选项:
[Option('s', "system", Required = true, HelpText = "Any help text")]
public string System { get; set; }
Run Code Online (Sandbox Code Playgroud) 我正在使用我在C#控制台应用程序.NET Framework 4.0中通过NuGet获得的命令行解析器库.
这是我的选择课......
class Options
{
[Option('p', "prompt", DefaultValue = true, HelpText = "Prompt the user before exiting the program.")]
public bool PromptForExit { get; set; }
[HelpOption]
public string GetUsage()
{
return HelpText.AutoBuild(this, (HelpText current) => HelpText.DefaultParsingErrorsHandler(this, current));
}
}
Run Code Online (Sandbox Code Playgroud)
这是我解析和使用选项的地方......
static void Main(string[] args)
{
Options options = new Options();
if (CommandLine.Parser.Default.ParseArguments(args, options))
{
if (options.PromptForExit)
{
Console.WriteLine("Press any key to exit.");
Console.ReadKey();
}
}
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试了各种各样的命令,试图让它在退出前不提示我,但它们都没有工作.是否有人熟悉这个库或者想知道如何从命令行获取PromptForExit选项是假的?
这是我尝试过的.
myprogram.exe
myprogram.exe -p false
myprogram.exe -p False …Run Code Online (Sandbox Code Playgroud) 我有一节课:
class Options
{
// Remainder omitted (verb1, verb2, verb3)
[HelpVerbOption]
public string GetUsage(string verb)
{
return HelpText.AutoBuild(this, verb);
}
}
Run Code Online (Sandbox Code Playgroud)
在本文档中(在最后一部分中)说:
...如果用户请求帮助索引,解析器也会将null传递给主类GetUsage(字符串):
$ git帮助
或者如果用户明确请求如何使用特定动词的说明,则使用verb命令:
$ git help commit
...
我尝试输入类型:MyApp.exe help verb1但只能看到基本帮助(好像我输入了错误的动词,help动词或其他内容).但我希望看到与指定动词相关的帮助消息.为什么它不起作用?
在您的应用程序中,它的功能是否正常工作?
使用Command Line Parser Library并使用具有默认值的列表或数组,默认值将打印为(Default:System.String []).有没有办法让它显示实际的默认值?
所以
[OptionList('l', "languages", Separator = ',', DefaultValue = new []{"eng"})]
public IList<string> Languages { get; set; }
Run Code Online (Sandbox Code Playgroud)
帮助文本打印为"(Default: System.String[]) ...".我想说"(Default: { "eng" })".
我正在为控制台应用程序开发 POC,在设置中使用 AddCommandLine 后,我正在努力从配置中检索命令行值。
工程项目
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)
节目类
public static class Program
{
public static async Task Main(string[] args)
{
Log.Logger = new LoggerConfiguration()
.Enrich.FromLogContext()
.WriteTo.Console()
.WriteTo.RollingFile("Logs//log.txt")
.CreateLogger();
await CreateHostBuilder(args)
.Build()
.RunAsync();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.UseSerilog()
.ConfigureAppConfiguration((hostingContext, config) =>
{
config.AddJsonFile("settings.json", true, true);
config.AddCommandLine(args);
})
.ConfigureServices((hostcontext, services) =>
{
services.AddHostedService<ConsoleApp>();
});
}
Run Code Online (Sandbox Code Playgroud)
控制台应用程序类
public class ConsoleApp : IHostedService
{
private readonly IConfiguration config;
private readonly ILogger<ConsoleApp> log;
public ConsoleApp(IConfiguration configuration, ILogger<ConsoleApp> logger)
{ …Run Code Online (Sandbox Code Playgroud) 有没有办法让Command Line Parser库报告未知参数?
给出以下选项类:
public class Options
{
[Option('i', "int-option", DefaultValue = 10, HelpText = "Set the int")]
public int IntOption { get; set; }
[ParserState]
public IParserState LastParserState { get; set; }
[HelpOption]
public string GetUsage()
{
return HelpText.AutoBuild(this,
HelpText.DefaultParsingErrorsHandler(this, current));
}
}
Run Code Online (Sandbox Code Playgroud)
以下程序:
var options = new Options();
var parser = new Parser(settings =>
{
settings.HelpWriter = Console.Error;
settings.IgnoreUnknownArguments = false;
});
if (parser.ParseArgumentsStrict(args, options))
{
Console.WriteLine("Int value set: {0}", options.IntOption);
}
Run Code Online (Sandbox Code Playgroud)
使用"MyProgram.exe --unknown"调用程序时,我只获取默认的使用信息,但没有提到解析失败的错误.我想向用户提供一些错误的指示.
有一个由gsscoder编写的C#的CommandLine解析器库(它有自己的SO标签,我正在添加它).它以getopt样式解析命令行选项,即:
myprogram --foo --bar=baz abc def ghi
Run Code Online (Sandbox Code Playgroud)
它还可以具有所谓的"未绑定"参数,即不受选项约束的独立位置参数; 在以上这些的例子是abc,def,和ghi.不幸的是,文档只提到"解析器有办法处理这些",但没有给出一个例子.而且我的C#并不那么尖锐,所以我被扫描的源代码量吓到了.
有人可以举一个解析后如何访问这些未绑定参数的例子吗?
我有一个带有一些参数和选项的控制台应用程序,因此我想使用免费的第三方库。
我为此目的找到了两个库:NDesk.Options和Command Line Parser Library
最后,我决定使用命令行解析器库,因为使用属性更清晰,所以我下载了它并添加了对它的引用。
问题是,当添加对我的 .NET Framework 3.5 项目的引用时,我收到一个警告图标。从上面我下载的页面来看,它说兼容性是.NET Framework 3.5+,所以我知道3.5是兼容的,对吗?如果不是,哪个早期版本与 .NET Framework 3.5 兼容?
如何访问已解析的CommandLine的Value属性?
关于解析的Wiki部分说T的实例可以通过该Value属性进行访问...
如果解析成功,您将获得派生的Parsed类型,该类型通过其Value属性公开T的实例。
但我看不到的任何Value属性parserResult,只有一个Tag...
ParserResult<Options> parserResult = Parser.Default.ParseArguments<Options>(args);
WriteLine(parserResult.Tag);
Run Code Online (Sandbox Code Playgroud)
而且我知道我缺少一些东西,好像在调试一样,可以看到Value属性???
我正在构建一个C#控制台应用程序,它使用CommandLineParser从cmd获取一些参数.
默认情况下,该库已经带有--help(或help verb),以显示有关接受的每个参数的帮助信息.
现在,当我运行--help命令时,我会得到帮助屏幕,但随后程序继续,但它会中断,因为未设置其他默认参数.
代码如下所示:
class Options
{
[Option('f', "force", Required = false, Default = false,
HelpText = "Force ....")]
public bool Force { get; set; }
[Option('v', "version", Required = false, Default = "",
HelpText =
"....")]
public string Version { get; set; }
[Option('s', "silent", Required = false, Default = false, HelpText = "Disables output ...")]
public bool Output { get; set; }
[Option('p', "path", Required = false, Default = "../some/dir/",
HelpText =
"Specifies the path …Run Code Online (Sandbox Code Playgroud) 我试图查看使用CommandLineParser 包和 Visual Studio Professional 2015(更新 3)解析命令行参数时发生的错误。这是我正在使用的代码:
using System;
using System.IO;
namespace SampleParser
{
class Program
{
static void Main(string[] args)
{
// Set the CommandLineParser configuration options.
var commandLineParser = new CommandLine.Parser(x =>
{
x.MutuallyExclusive = true;
x.HelpWriter = Console.Error;
x.IgnoreUnknownArguments = false;
});
// Parse the command-line arguments.
var options = new CommandLineOptions();
var optionsAreValid = commandLineParser.ParseArguments(args, options);
if (!optionsAreValid)
{
return;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我期待看到一些有关导致optionsAreValid设置为false的问题的有用信息出现在Debug > Windows > Output …