Руководство. Создание средства .NET с помощью .NET CLI

Эта статья применяется к: ✔️ .NET 8 SDK и более поздним версиям

В этом руководстве описано, как создать и упаковать средство .NET. Интерфейс командной строки .NET позволяет создать консольное приложение в качестве средства, которое другие пользователи могут установить и запустить. Средства .NET — это пакеты NuGet, установленные из .NET CLI. Дополнительные сведения о средствах см. в обзоре средств .NET.

Создаваемое средство — консольное приложение, которое принимает сведения о текущей среде .NET и отображает ее, включая версию .NET, сведения о операционной системе и параметры ключевых переменных среды.

Это руководство является первым в серии трех учебников. В этом руководстве описано, как создать и упаковить средство. В следующих двух руководствах вы используете инструмент в качестве глобального инструмента и используете его в качестве локального инструмента. Процедуры создания инструмента совпадают с тем, используется ли он как глобальный инструмент или как локальный инструмент.

Предпосылки

  • .NET SDK 10.0 или более поздняя версия.

    В этом руководстве используется пакет SDK .NET версии 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.
    • Система — описание ОС, архитектура, имя компьютера и число процессоров.
    • Переменные среды — шесть ключевых переменных, связанных с .NET (, , , , и ), показывающие для любой, которая не настроена.

    Директива 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. Создайте пакет NuGet, выполнив команду dotnet pack :

    dotnet pack
    

    Файл dotnet-env.1.0.0.nupkg создается в папке, определяемой значением <PackageOutputPath> из файла dotnet-env.csproj , который в этом примере — папка ./nupkg .

    Чтобы выпустить средство публично, отправьте его в https://www.nuget.org. После того как средство будет доступно в NuGet, разработчики могут установить средство с помощью команды установки средства dotnet . В этом руководстве вы устанавливаете пакет непосредственно из локальной папки nupkg , поэтому нет необходимости отправлять пакет в NuGet.

Устранение неполадок

Если вы получите сообщение об ошибке при выполнении руководства, см. статью Устранение проблем с использованием средств .NET.

Дальнейшие шаги

В этом руководстве вы создали консольное приложение и упаковали его в качестве инструмента. Чтобы узнать, как использовать инструмент как универсальный инструмент, перейдите к следующему уроку.

Если вы предпочитаете, вы можете пропустить руководство по глобальным средствам и перейти непосредственно к руководству по локальным средствам.

См. также