C# Nuget的命令行解析器包是什么;“类型”;你期待什么?

C# Nuget的命令行解析器包是什么;“类型”;你期待什么?,c#,visual-studio,C#,Visual Studio,我找不到任何有用的文档或示例,这些文档或示例似乎使用了与我相同的版本,这需要这个论证。目前,我已定义了一个包含我的参数的类: public class CmdArgs { // Required [Option("ifp", HelpText = "Input filepath", Required = true)] public string path_csv_in {get; set; } [Option("ofp", HelpText = "Output

我找不到任何有用的文档或示例,这些文档或示例似乎使用了与我相同的版本,这需要这个论证。目前,我已定义了一个包含我的参数的类:

public class CmdArgs {
    // Required
    [Option("ifp", HelpText = "Input filepath", Required = true)]
    public string path_csv_in {get; set; }

    [Option("ofp", HelpText = "Output filepath", Required = true)]
    public string path_csv_out {get; set; }

    [Option("dfp", HelpText = "Deck filepath", Required = true)]
    public string path_deck_in {get; set; }

    [Option("ffp", HelpText = "Fortran .dll filepath", Required = true)]
    public string dll_path {get; set; }

    [Option("gfs", HelpText = "Gas fuel spec", Required = true)]
    public string path_gas_fuel_spec {get; set; }

    [Option("lfs", HelpText = "Liquid fuel spec", Required = true)]
    public string path_liq_fuel_spec {get; set; }

    [Option("dut", HelpText = "Driven unit type: PG or MD", Required = true)]
    public string type_du {get; set; }

    [Option("mgr", HelpText = "Main gearbox ratio", Required = true)]
    public string ratio_gb_main {get; set; }


    // Not required
    [Option("cts", HelpText = "CT capacity scale factor: Default is ..", Required = false, Default = ..)]
    public string ct_scale_f {get; set; }

    [Option("ipl", HelpText = "Inlet pressure loss, nominal: Default is ..", Required = false, Default = ..)]
    public string plin_nom {get; set; }

    [Option("epl", HelpText = "Exhaust pressure loss, nominal: Default is ..", Required = false, Default = ..)]
    public string plex_nom {get; set; }

    [Option("bpl", HelpText = "Exhaust pressure loss, bypass: Default is ..", Required = false, Default = ..)]
    public string plex_bp {get; set; }

    [Option("aef", HelpText = "Alternator efficiency", Required = false, Default = ..)]
    public string effic_alt {get; set; }
}
对象初始值设定项:

CmdArgs ops = new CmdArgs();
和解析器:

Parser.Default.ParseArguments(args);
有些示例似乎只使用“args”参数,但在“debug:command-line-arguments”中使用这些参数运行:(路径和参数替换为通用路径等)

“throws”指定的参数超出了有效值的范围。参数名:types',在“ParseArguments”中输入参数时的工具提示表明它需要args和“params Type[]types”,但这是什么?我找不到任何有用的东西,也找不到头脑

谢谢

换行

Parser.Default.ParseArguments(args);
进入

您必须指定这些参数应该解析到哪里

编辑尽管进一步研究,上述内容适用于以前的版本(1.9)

根据当前版本(2.2)的要求,您应该执行以下操作:

CommandLine.Parser.Default.ParseArguments<CmdArgs>(args)
  .WithParsed<CmdArgs>(opts => RunWithOptions(opts));

这给了我:“错误CS1503参数2:无法从'Performance_Agent.CmdArgs'转换为'System.Type',所以要运行我的Main方法,我将用Main(新字符串[]{opts.arg1,opts.arg2}等)替换runoptions和turnexitcode(opts)?如果您已经在主方法中,这将导致问题。只需将“真实”代码(而不是参数解析)移动到另一个方法并使用它。与主方法中包含使用已解析参数的任何部分一样,是否应将其移动到自己的方法中以在此处使用?很抱歉我不理解,c#对我来说是全新的。是的,没错。代码包含两个基本部分:读取选项和使用选项。“reading”保留在Main中,“using”保留在自己的方法中(可以调用其他方法),并通过参数获取选项。
Parser.Default.ParseArguments(args, ops);
CommandLine.Parser.Default.ParseArguments<CmdArgs>(args)
  .WithParsed<CmdArgs>(opts => RunWithOptions(opts));
private static void RunWithOptions(CmdArgs options)
{
   // use the "options" to perform the real work
}