【问题标题】:.NET 6.0 C# "new console template" - how to read CLI arguments?.NET 6.0 C#“新控制台模板” - 如何读取 CLI 参数?
【发布时间】:2022-01-05 14:00:19
【问题描述】:

现在 .NET 6.0 已经发布,似乎对默认 CLI 项目模板进行了彻底更新,因为没有熟悉的样板被简化为以下内容:

// See https://aka.ms/new-console-template for more information
Console.WriteLine("Hello, World!");

尚不清楚(到目前为止,我一直在尝试查找文档,但无济于事)是如何访问传递给可执行文件的入口点类的命令行参数?

【问题讨论】:

  • 仅仅因为不再需要显式指定Main 方法(因为它是在后台自动添加的),并不意味着它不允许...
  • 只要点击评论中的链接,它说明了当你需要 Main() 时该怎么做。
  • 这个问题的目的是帮助那些希望接受使用此类项目模板的新方式的人,因为它是“前沿”而导致文档缺乏清晰度。使用原始模板基本上意味着“不要使用新模板”,这是一种回归方法。
  • @HansPassant 该链接没有记录使用新模板访问 CLI 参数的替代方法。我的问题不是问如何使用Main()

标签: c# command-line-interface .net-6.0 visual-studio-2022


【解决方案1】:

您可以使用Environment 类从代码中的任何位置访问命令行参数。

具体来说,你可以使用Environment.GetCommandLineArgs:

string name = Environment.GetCommandLineArgs()[1];
Console.WriteLine($"Hello, {name}!");

请注意,数组中的第一个元素包含可执行文件的路径,传递给程序的参数从第二个元素开始,即索引 1。

【讨论】:

  • 完美。谢谢!希望这可以帮助任何在那里寻找答案的人。
  • 我正在检查,这项工作也很有效:Console.WriteLine($"Hello, World! {args[1]}");
  • @Peres 是的,那是 Guru Stron 的答案
【解决方案2】:

新项目模板正在使用名为 top-level statements 的 C# 9 功能。

对于顶级语句文件编译器会生成string[] args参数(实际上是generates整个类包含Main方法),所以你可以直接使用它(就像之前用Main(string[] args)做的那样):

Console.WriteLine(args.Length);

更多关于生成模式的信息可以在in the docs找到。

【讨论】:

  • 不编译,因为args 未定义。
  • @djtubig-malicex 我在我的机器上编译它,在 shraplab.io(答案中的链接之一),这里是dotnetfiddle
  • 为什么会有这种pythonic的感觉?
猜你喜欢
  • 1970-01-01
  • 2023-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-25
  • 2010-11-20
  • 1970-01-01
相关资源
最近更新 更多