.NET 6.0 C#“新控制台模板”-如何读取 CLI 参数?

问题描述 投票:0回答:5

现在 .NET 6.0 已经发布,默认 CLI 项目模板的彻底更新似乎是缺少熟悉的样板,被简化为以下内容:

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

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

c# command-line-interface .net-6.0 visual-studio-2022
5个回答
111
投票

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

特别是,您可以使用 Environment.GetCommandLineArgs:

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

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


66
投票

新项目模板正在使用称为“顶级语句”的 C# 9 功能。 对于顶级语句文件,编译器将生成

string[] args

参数(实际上它
生成包含Main方法的整个类),因此您可以直接使用它(就像之前使用
Main(string[] args)
所做的那样):
Console.WriteLine(args.Length);
Console.WriteLine(args.FirstOrDefault());

有关生成模式的更多信息可以在
顶级语句

功能规范中找到。另请参阅顶级语句 - 没有 Main 方法的程序文档。


2
投票

public static void Main(string[] args)

只是给你“args”作为一个变量,供重用。实际上,我只是在 VS 2022 上看到“当地人”弹出时偶然发现的。

如果我想调试测试控制台应用程序,只需使用配置文件>ConsoleApp>commandLineArgs 下的“launchSettings.json”。

所以如果我在一家初创公司:

{ "profiles": { "ConsoleApp": { "commandName": "Project", "commandLineArgs": "Brett Robel" } } }

在我的 .NET 6 命令行应用程序中:

var firstName = args.First(); var lastName = args.Last(); Console.WriteLine($"Hello {firstName} and Last {lastName}");

我应该看到:


1
投票


0
投票
顶级语句

,旨在模仿 Python 的简单语法,以对抗它们的吸引力,尤其是对新手程序员的吸引力。 顶级语句可以采用输入参数,如下所示:

using System; string[] args = new string[]; Console.WriteLine($"Hello args[0]");

如果将上述 C# 代码编译为 
Program.exe

并导航到其文件夹,那么您可以从那里简单地调用它并从命令行向其传递一个输入参数,如下所示:

Program.exe world

© www.soinside.com 2019 - 2024. All rights reserved.