本文适用于: ✔️.NET Core 2.1 SDK 及更高版本
本教程介绍如何创建和打包 .NET 工具。 .NET CLI 允许你创建控制台应用程序作为工具,其他人可以安装和运行该应用程序。 .NET 工具是从 .NET CLI 安装的 NuGet 包。 有关工具的详细信息,请参阅 .NET 工具概述。
你将创建的工具是一个控制台应用程序,该应用程序采用消息作为输入,并显示消息以及创建机器人图像的文本行。
这是三个教程系列中的第一个教程。 在本教程中,你将创建并打包工具。 在接下来的两个教程中,你将 该工具用作全局工具 , 并将该工具用作本地工具。 无论将其用作全局工具还是本地工具,创建工具的过程都是相同的。
先决条件
.NET SDK 6.0.100 或更高版本。
本教程使用 .NET SDK 6.0,但从 .NET Core SDK 2.1 开始提供全局工具。 本地工具从 .NET Core SDK 3.0 开始可用。
你选择的文本编辑器或代码编辑器。
创建项目
打开命令提示符并创建名为 存储库的文件夹。
导航到 存储库 文件夹并输入以下命令:
dotnet new console -n microsoft.botsay -f net6.0该命令在存储库文件夹下创建名为 microsoft.botsay 的新文件夹。
注释
在本教程中,你将创建面向 .NET 6.0 的工具。 若要以其他框架为目标,请更改
-f|--framework选项。 若要面向多个框架,请将TargetFramework元素更改为TargetFrameworks项目文件中的元素,如以下示例所示:<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFrameworks>net8.0;net6.0</TargetFrameworks> </PropertyGroup> </Project>导航到 microsoft.botsay 文件夹。
cd microsoft.botsay
添加代码
使用代码编辑器打开 Program.cs 文件。
将 Program.cs 中的代码替换为以下代码:
using System.Reflection; namespace microsoft.botsay; internal class Program { static void Main(string[] args) { Console.WriteLine("Hello World!"); } }下一步中添加的代码需要该
using System.Reflection;指令。将
Main该方法替换为以下代码,以处理应用程序的命令行参数。static void Main(string[] args) { if (args.Length == 0) { var versionString = Assembly.GetEntryAssembly()? .GetCustomAttribute<AssemblyInformationalVersionAttribute>()? .InformationalVersion .ToString(); Console.WriteLine($"botsay v{versionString}"); Console.WriteLine("-------------"); Console.WriteLine("\nUsage:"); Console.WriteLine(" botsay <message>"); return; } ShowBot(string.Join(' ', args)); }如果未传递任何参数,将显示一条简短的帮助消息。 否则,所有参数都串联成单个字符串,并通过调用
ShowBot在下一步中创建的方法进行打印。添加一个名为
ShowBot采用字符串参数的新方法。 该方法使用文本行打印机器人的消息和图像。static void ShowBot(string message) { string bot = $"\n {message}"; bot += @" __________________ \ \ .... ....' .... .......... .............'..'.. ................'..'..... .......'..........'..'..'.... ........'..........'..'..'..... .'....'..'..........'..'.......'. .'..................'... ...... . ......'......... ..... . _ __ ...... .. # ## ...... .... . ....... ...... ....... ............ ................ ...................... ........................'................ ......................'..'...... ....... .........................'..'..... ....... ........ ..'.............'..'.... .......... ..'..'... ...............'....... .......... ...'...... ...... .......... ...... ....... ........... ....... ........ ...... ....... '...'.'. '.'.'.' .... ....... .....'.. ..'..... .. .......... ..'........ ............ .............. ............. '.............. ...........'.. .'.'............ ............... .'.'............. .............'.. ..'..'........... ............... .'.............. ......... .............. ..... "; Console.WriteLine(bot); }保存更改。
测试应用程序
运行项目并查看输出。 请尝试命令行中的这些变体以查看不同的结果:
dotnet run
dotnet run -- "Hello from the bot"
dotnet run -- Hello from the bot
分隔符后 -- 的所有参数都传递给应用程序。
打包工具
在打包和分发应用程序作为工具之前,需要修改项目文件。
打开 microsoft.botsay.csproj 文件,并将三个新的 XML 节点添加到节点的
<PropertyGroup>末尾:<PackAsTool>true</PackAsTool> <ToolCommandName>botsay</ToolCommandName> <PackageOutputPath>./nupkg</PackageOutputPath><ToolCommandName>是一个可选元素,指定将在安装该工具后调用该工具的命令。 如果未提供此元素,则工具的命令名称为程序集名称,通常是没有 .csproj 扩展名的项目文件名。注释
为
<ToolCommandName>. 选择唯一值。 避免使用文件扩展名(如.exe或.cmd),因为该工具作为应用主机安装,并且命令不应包含扩展。 这有助于防止与现有命令发生冲突,并确保顺利安装体验。<PackageOutputPath>是一个可选元素,用于确定要生成 NuGet 包的位置。 NuGet 包是 .NET CLI 用于安装工具的内容。项目文件现在如以下示例所示:
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>net6.0</TargetFramework> <PackAsTool>true</PackAsTool> <ToolCommandName>botsay</ToolCommandName> <PackageOutputPath>./nupkg</PackageOutputPath> </PropertyGroup> </Project>通过运行 dotnet pack 命令创建 NuGet 包:
dotnet packmicrosoft.botsay.1.0.0.nupkg 文件是在由 microsoft.botsay.csproj 文件中的值标识的文件夹中创建的,在本示例中为 ./nupkg 文件夹。
<PackageOutputPath>如果要公开发布工具,可以将其
https://www.nuget.org上传到 。 在 NuGet 上提供该工具后,开发人员可以使用 dotnet 工具安装命令安装 该工具。 在本教程中,直接从本地 nupkg 文件夹安装包,因此无需将包上传到 NuGet。
故障排除
如果在遵循本教程时收到错误消息,请参阅 排查 .NET 工具使用问题。
后续步骤
在本教程中,你创建了一个控制台应用程序并将其打包为工具。 若要了解如何将该工具用作全局工具,请转到下一教程。
如果需要,可以跳过全局工具教程并直接转到本地工具教程。