接下来将为你详细讲解如何通过System.CommandLine来快速生成支持命令行的应用程序。
1. 什么是System.CommandLine
System.CommandLine是用于构建命令行界面(CLI)的.NET库。它允许您快速创建参数化的命令行应用程序(如dotnet cli),同时可自动处理帮助和明确定义的参数、选项和子命令。如果您曾经使用过argparse或OptParse这样的Python库,那么您会很快上手System.CommandLine。
2. 快速开始
首先,您需要安装System.CommandLine库。可以通过NuGet包管理器或用以下命令行执行安装:
dotnet add package System.CommandLine
接下来,系统将生成以下三个文件:
- Program.cs:主程序文件,在其中编写您的Command Line应用程序代码;
- Program.csproj:定义项目文件和其他组件;
- appsettings.json:此文件在此例中未使用。
目前我们只需要关注Program.cs文件。在这个文件的顶部,您需要导入System.CommandLine命名空间:
using System.CommandLine;
using System.CommandLine.Invocation;
现在让我们为我们的CLI定义一些命令。例如,定义一个命令行应用程序,它从命令行接收两个参数:用户的名称和城市,并返回一条欢迎信息。在Program.cs文件中添加以下代码:
public static class Program
{
public static int Main(string[] args)
{
var rootCommand = new RootCommand();
var username = new Option<string>(
"-u",
"--username",
"The username of the person to greet");
var city = new Option<string>(
"-c",
"--city",
"The city of the person to greet");
var greetingCommand = new Command("greet", "Greet someone")
{
username,
city
};
greetingCommand.Handler = CommandHandler.Create((string username, string city) =>
{
var name = string.IsNullOrEmpty(username) ? "World" : username;
var place = string.IsNullOrEmpty(city) ? "somewhere" : city;
Console.WriteLine($"Hello, {name} from {place}!");
});
rootCommand.AddCommand(greetingCommand);
return rootCommand.InvokeAsync(args).Result;
}
}
上面的代码中,我们创建了一个名为“greet”的命令,它接收两个参数:用户名和城市。然后,我们设置了命令的处理程序,以便在执行“greet”命令时输出带有名称和城市的欢迎消息。最后,我们将该命令添加到RootCommand中。
现在,您就可以运行带有命令和参数的CLI了!打开控制台,输入以下命令:
dotnet run greet -u Alice -c New_York
现在,你应该会在命令行中看到以下输出:
Hello, Alice from New_York!
3. 示例说明
下面是两个示例来帮助更好的理解使用System.CommandLine来生成支持命令行的应用程序。
示例一
在这个示例中,我们将通过命令行将两个数字相加。我们需要传递两个数字作为参数。
public static class Program
{
public static int Main(string[] args)
{
var rootCommand = new RootCommand
{
new Option<int>(
"--number1",
"The first number."){
IsRequired = true
},
new Option<int>(
"--number2",
"The second number."){
IsRequired = true
}
};
rootCommand.Handler = CommandHandler.Create<int, int>((number1, number2) =>
{
Console.WriteLine($"The sum of {number1} and {number2} is {number1 + number2}");
});
return rootCommand.Invoke(args);
}
}
现在打开控制台,输入以下命令:
dotnet run --number1 2 --number2 3
现在,你应该会在命令行中看到以下输出:
The sum of 2 and 3 is 5
示例二
在这个示例中,我们将通过命令行重命名或复制文件。我们需要传递三个参数:输入文件路径、输出文件路径和操作类型。
public static int Main(string[] args)
{
var rootCommand = new RootCommand
{
new Option<string>(
"--input",
"The input file to rename or copy."){
IsRequired = true
},
new Option<string>(
"--output",
"The output file name or path."){
IsRequired = true
},
new Option<OperationType>(
"--operation",
"The type of operation to perform."){
IsRequired = true
}
};
rootCommand.Handler = CommandHandler.Create<string, string, OperationType>((input, output, operationType) =>
{
if (!File.Exists(input))
{
Console.WriteLine($"File {input} does not exist.");
return;
}
if (operationType == OperationType.Rename)
{
File.Move(input, output, true);
Console.WriteLine($"Rename successful. New file name is {output}.");
}
else if (operationType == OperationType.Copy)
{
File.Copy(input, output, true);
Console.WriteLine($"File copied at {output}.");
}
});
return rootCommand.Invoke(args);
}
public enum OperationType
{
Rename,
Copy
}
现在打开控制台,输入以下命令:
dotnet run --input input.txt --output output.txt --operation Rename
现在,你应该会在命令行中看到以下输出:
Rename successful. New file name is output.txt.
根据输入参数,文件“input.txt”已重命名为“output.txt”。
以上是通过System.CommandLine快速生成支持命令行的应用程序的攻略,希望对您有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#通过System.CommandLine快速生成支持命令行的应用程序 - Python技术站