本文适用于: ✔️ .NET 8 SDK 及更高版本
本教程介绍如何创建和打包 .NET 工具。 .NET CLI 允许你创建控制台应用程序作为工具,其他人可以安装和运行该应用程序。 .NET 工具是通过 .NET 命令行界面(CLI)安装的 NuGet 包。 有关工具的详细信息,请参阅 .NET 工具概述。
你将创建的工具是一个控制台应用程序,它获取有关当前.NET环境的信息并显示它,包括.NET版本、操作系统详细信息和关键环境变量设置。
本教程是三个教程系列中的第一个教程。 在本教程中,你将创建并打包工具。 在接下来的两个教程中,你将 该工具用作全局工具 , 并将该工具用作本地工具。 无论将其用作全局工具还是本地工具,创建工具的过程都是相同的。
先决条件
.NET SDK 10.0 或更高版本。
本教程使用 .NET SDK 10.0,但本指南适用于 .NET 8.0 及更高版本。
你选择的文本编辑器或代码编辑器。
创建项目
打开命令提示符并创建名为 存储库的文件夹。
导航到 存储库 文件夹并输入以下命令:
dotnet new console -n dotnet-env该命令在存储库文件夹下创建名为 dotnet-env 的新文件夹。
导航到 dotnet-env 文件夹。
cd dotnet-env
添加代码
使用代码编辑器打开 Program.cs 文件。
将内容替换为以下代码:
using System.Reflection; using System.Runtime.InteropServices; var versionString = Assembly.GetEntryAssembly()? .GetCustomAttribute<AssemblyInformationalVersionAttribute>()? .InformationalVersion .ToString(); Console.WriteLine($"dotnet-env v{versionString}"); Console.WriteLine(new string('-', 40)); Console.WriteLine(); Console.WriteLine("Runtime"); Console.WriteLine($" .NET Version {Environment.Version}"); Console.WriteLine($" Framework {RuntimeInformation.FrameworkDescription}"); Console.WriteLine($" Runtime Identifier {RuntimeInformation.RuntimeIdentifier}"); Console.WriteLine(); Console.WriteLine("System"); Console.WriteLine($" OS {RuntimeInformation.OSDescription}"); Console.WriteLine($" Architecture {RuntimeInformation.OSArchitecture}"); Console.WriteLine($" Machine Name {Environment.MachineName}"); Console.WriteLine($" Processor Count {Environment.ProcessorCount}"); Console.WriteLine(); Console.WriteLine("Environment Variables"); string[] envVars = { "DOTNET_ROOT", "DOTNET_HOST_PATH", "DOTNET_CLI_HOME", "DOTNET_NOLOGO", "NUGET_PACKAGES", "DOTNET_ENVIRONMENT" }; foreach (string name in envVars) { string? value = Environment.GetEnvironmentVariable(name); Console.WriteLine($" {name,-24}{value ?? "(not set)"}"); }程序使用顶级语句来读取程序集的信息版本
Assembly.GetEntryAssembly()AssemblyInformationalVersionAttribute,然后打印应用名称和分隔线,然后显示三个信息节:-
Runtime – .NET版本、框架说明和运行时标识符,使用
Environment.Version和RuntimeInformation。 - 系统 – OS 说明、体系结构、计算机名称和处理器计数。
-
环境变量 — 六个关键的.NET相关变量(
DOTNET_ROOT、DOTNET_HOST_PATH、DOTNET_CLI_HOME、DOTNET_NOLOGO、NUGET_PACKAGES和DOTNET_ENVIRONMENT),显示没有配置的任何(not set)。
using System.Reflection指令是Assembly.GetEntryAssembly()和AssemblyInformationalVersionAttribute所必需的。using System.Runtime.InteropServices指令对于RuntimeInformation是必需的。-
Runtime – .NET版本、框架说明和运行时标识符,使用
保存更改。
测试应用程序
运行项目并查看输出:
dotnet run
输出与以下示例类似:
dotnet-env v1.0.0
----------------------------------------
Runtime
.NET Version 10.0.4
Framework .NET 10.0.4
Runtime Identifier win-x64
System
OS Microsoft Windows 10.0.22631
Architecture X64
Machine Name MY-MACHINE
Processor Count 16
Environment Variables
DOTNET_ROOT (not set)
DOTNET_HOST_PATH (not set)
DOTNET_CLI_HOME (not set)
DOTNET_NOLOGO (not set)
NUGET_PACKAGES (not set)
DOTNET_ENVIRONMENT (not set)
注释
显示的值取决于计算机和.NET安装。 输出因平台而异。
将工具打包
若要将应用程序打包并分发为工具,请修改项目文件。
打开 dotnet-env.csproj 文件,并将三个新的 XML 节点添加到节点的
<PropertyGroup>末尾:<PackAsTool>true</PackAsTool> <ToolCommandName>dotnet-env</ToolCommandName> <PackageOutputPath>./nupkg</PackageOutputPath><ToolCommandName>是一个可选元素,指定安装后调用该工具的命令。 如果未提供此元素,则工具的命令名称为程序集名称,通常是没有 .csproj 扩展名的项目文件名。注释
为
<ToolCommandName>选择唯一值。 避免使用文件扩展名(如.exe或.cmd),因为该工具作为应用主机安装,并且命令不应包含扩展。 这有助于防止与现有命令发生冲突,并确保顺利安装体验。<PackageOutputPath>是一个可选元素,用于确定.NET生成 NuGet 包的位置。 .NET CLI 使用 NuGet 包安装工具。项目文件现在如以下示例所示:
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>net10.0</TargetFramework> <ImplicitUsings>enable</ImplicitUsings> <Nullable>enable</Nullable> <PackAsTool>true</PackAsTool> <ToolCommandName>dotnet-env</ToolCommandName> <PackageOutputPath>./nupkg</PackageOutputPath> </PropertyGroup> </Project>通过运行 dotnet pack 命令创建 NuGet 包:
dotnet packdotnet-env.1.0.0.nupkg 文件是在
<PackageOutputPath>文件中由 值确定的文件夹中创建的,在这个例子中是 ./nupkg 文件夹。若要公开发布工具,请将其上传到
https://www.nuget.org。 在 NuGet 上提供该工具后,开发人员可以使用 dotnet 工具安装命令安装 该工具。 在本教程中,直接从本地 nupkg 文件夹安装包,因此无需将包上传到 NuGet。
故障排除
如果在遵循本教程时收到错误消息,请参阅 排查 .NET 工具使用问题。
后续步骤
在本教程中,你创建了一个控制台应用程序并将其打包为工具。 若要了解如何将该工具用作全局工具,请转到下一教程。
如果需要,可以跳过全局工具教程并直接转到本地工具教程。
另请参阅
原文:教程:使用 .NET CLI 创建、打包和使用工具。作者/来源:Microsoft Learn 文档贡献者。本文依据所列原文整理为中文,代码、命令与配置示例保留原文。











暂无评论内容