教程:使用 .NET CLI 创建、打包和使用工具

本文适用于: ✔️ .NET 8 SDK 及更高版本

本教程介绍如何创建和打包 .NET 工具。 .NET CLI 允许你创建控制台应用程序作为工具,其他人可以安装和运行该应用程序。 .NET 工具是通过 .NET 命令行界面(CLI)安装的 NuGet 包。 有关工具的详细信息,请参阅 .NET 工具概述。

你将创建的工具是一个控制台应用程序,它获取有关当前.NET环境的信息并显示它,包括.NET版本、操作系统详细信息和关键环境变量设置。

本教程是三个教程系列中的第一个教程。 在本教程中,你将创建并打包工具。 在接下来的两个教程中,你将 该工具用作全局工具 , 并将该工具用作本地工具。 无论将其用作全局工具还是本地工具,创建工具的过程都是相同的。

先决条件

  • .NET SDK 10.0 或更高版本。

    本教程使用 .NET SDK 10.0,但本指南适用于 .NET 8.0 及更高版本。

  • 你选择的文本编辑器或代码编辑器。

创建项目

  1. 打开命令提示符并创建名为 存储库的文件夹。

  2. 导航到 存储库 文件夹并输入以下命令:

    dotnet new console -n dotnet-env
    

    该命令在存储库文件夹下创建名为 dotnet-env 的新文件夹。

  3. 导航到 dotnet-env 文件夹。

    cd dotnet-env
    

添加代码

  1. 使用代码编辑器打开 Program.cs 文件。

  2. 将内容替换为以下代码:

    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 是必需的。

  3. 保存更改。

测试应用程序

运行项目并查看输出:

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安装。 输出因平台而异。

将工具打包

若要将应用程序打包并分发为工具,请修改项目文件。

  1. 打开 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>
    
  2. 通过运行 dotnet pack 命令创建 NuGet 包:

    dotnet pack
    

    dotnet-env.1.0.0.nupkg 文件是在 <PackageOutputPath> 文件中由 值确定的文件夹中创建的,在这个例子中是 ./nupkg 文件夹。

    若要公开发布工具,请将其上传到 https://www.nuget.org。 在 NuGet 上提供该工具后,开发人员可以使用 dotnet 工具安装命令安装 该工具。 在本教程中,直接从本地 nupkg 文件夹安装包,因此无需将包上传到 NuGet。

故障排除

如果在遵循本教程时收到错误消息,请参阅 排查 .NET 工具使用问题。

后续步骤

在本教程中,你创建了一个控制台应用程序并将其打包为工具。 若要了解如何将该工具用作全局工具,请转到下一教程。

如果需要,可以跳过全局工具教程并直接转到本地工具教程。

另请参阅


原文:教程:使用 .NET CLI 创建、打包和使用工具。作者/来源:Microsoft Learn 文档贡献者。本文依据所列原文整理为中文,代码、命令与配置示例保留原文。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容