Esercitazione: Creare uno strumento .NET usando l'interfaccia della riga di comando di .NET

Questo articolo si applica a: ✔️ .NET Core 2.1 SDK e versioni successive

Questa esercitazione illustra come creare uno strumento .NET e comprimerlo in un pacchetto. L'interfaccia della riga di comando di .NET consente di creare un'applicazione console come strumento, che altri utenti possono installare ed eseguire. Gli strumenti .NET sono pacchetti NuGet installati dall'interfaccia della riga di comando di .NET. Per altre informazioni sugli strumenti, vedere Panoramica degli strumenti .NET.

Lo strumento che verrà creato è un'applicazione console che accetta un messaggio come input e visualizza il messaggio insieme alle righe di testo che creano l'immagine di un robot.

Questa è la prima di una serie di tre esercitazioni. In questa esercitazione si creerà uno strumento e lo si comprimerà in un pacchetto. Nelle due esercitazioni successive si userà lo strumento come strumento globale e si userà lo strumento come strumento locale. Le procedure per la creazione di uno strumento sono uguali, sia che venga usato come strumento globale o come strumento locale.

Prerequisiti

  • .NET SDK 6.0.100 o una versione successiva.

    Questa esercitazione usa .NET SDK 6.0, ma gli strumenti globali sono disponibili a partire da .NET Core SDK 2.1. Gli strumenti locali sono disponibili a partire da .NET Core SDK 3.0.

  • Un editor di testo o editor di codice di propria scelta.

Creare un progetto

  1. Aprire un prompt dei comandi e creare una cartella denominata repository.

  2. Passare alla cartella repository e immettere il comando seguente:

    dotnet new console -n microsoft.botsay -f net6.0
    

    Il comando crea una nuova cartella denominata microsoft.botsay nella cartella repository.

    Nota

    Per questa esercitazione si crea uno strumento destinato a .NET 6.0. Per impostare come destinazione un framework diverso, modificare l'opzione -f|--framework. Per impostare come destinazione più framework, modificare l'elemento TargetFramework in un elemento TargetFrameworks nel file di progetto, come illustrato nell'esempio seguente:

    <Project Sdk="Microsoft.NET.Sdk">
      <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFrameworks>net8.0;net6.0</TargetFrameworks>
      </PropertyGroup>
    </Project>
    
  3. Passare alla cartella microsoft.botsay.

    cd microsoft.botsay
    

Aggiunta del codice

  1. Aprire il file Program.cs nell'editor di codice.

  2. Sostituire il codice in Program.cs con il codice seguente:

    using System.Reflection;
    
    namespace microsoft.botsay;
    
    internal class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
        }
    }
    

    La direttiva using System.Reflection; è necessaria per il codice che si aggiungerà nel passaggio successivo.

  3. Sostituire il metodo Main con il codice seguente per elaborare gli argomenti della riga di comando per l'applicazione.

    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));
    }
    

    Se non si passa alcun argomento, viene visualizzato un breve messaggio della Guida. In caso contrario, tutti gli argomenti vengono concatenati in una singola stringa e stampati chiamando il metodo ShowBot creato nel passaggio successivo.

  4. Aggiungere un nuovo metodo denominato ShowBot che accetta un parametro di stringa. Il metodo stampa il messaggio e l'immagine di un robot usando righe di testo.

    static void ShowBot(string message)
    {
        string bot = $"\n        {message}";
        bot += @"
        __________________
                          \
                           \
                              ....
                              ....'
                               ....
                            ..........
                        .............'..'..
                     ................'..'.....
                   .......'..........'..'..'....
                  ........'..........'..'..'.....
                 .'....'..'..........'..'.......'.
                 .'..................'...   ......
                 .  ......'.........         .....
                 .    _            __        ......
                ..    #            ##        ......
               ....       .                 .......
               ......  .......          ............
                ................  ......................
                ........................'................
               ......................'..'......    .......
            .........................'..'.....       .......
         ........    ..'.............'..'....      ..........
       ..'..'...      ...............'.......      ..........
      ...'......     ...... ..........  ......         .......
     ...........   .......              ........        ......
    .......        '...'.'.              '.'.'.'         ....
    .......       .....'..               ..'.....
       ..       ..........               ..'........
              ............               ..............
             .............               '..............
            ...........'..              .'.'............
           ...............              .'.'.............
          .............'..               ..'..'...........
          ...............                 .'..............
           .........                        ..............
            .....
    ";
        Console.WriteLine(bot);
    }
    
  5. Salvare le modifiche.

Testare l'applicazione

Eseguire il progetto e osservare l'output. Provare queste variazioni nella riga di comando per ottenere risultati diversi:

dotnet run
dotnet run -- "Hello from the bot"
dotnet run -- Hello from the bot

Tutti gli argomenti dopo il delimitatore -- vengono passati all'applicazione.

Comprimere lo strumento in un pacchetto

Prima di inserire in un pacchetto e distribuire l'applicazione come uno strumento, è necessario modificare il file di progetto.

  1. Aprire il file microsoft.botsay.csproj e aggiungere tre nuovi nodi XML alla fine del nodo <PropertyGroup>:

    <PackAsTool>true</PackAsTool>
    <ToolCommandName>botsay</ToolCommandName>
    <PackageOutputPath>./nupkg</PackageOutputPath>
    

    <ToolCommandName> è un elemento facoltativo che specifica il comando che richiamerà lo strumento dopo l'installazione. Se questo elemento non viene specificato, il nome del comando per lo strumento è il nome dell'assembly, che in genere è il nome del file di progetto senza l'estensione .csproj.

    <PackageOutputPath> è un elemento facoltativo che determina dove verrà generato il pacchetto NuGet. Il pacchetto NuGet viene usato dall'interfaccia della riga di comando di .NET per installare lo strumento.

    Il file di progetto ha ora un aspetto simile all'esempio seguente:

    <Project Sdk="Microsoft.NET.Sdk">
    
      <PropertyGroup>
    
        <OutputType>Exe</OutputType>
        <TargetFramework>net6.0</TargetFramework>
    
        <PackAsTool>true</PackAsTool>
        <ToolCommandName>botsay</ToolCommandName>
        <PackageOutputPath>./nupkg</PackageOutputPath>
    
      </PropertyGroup>
    
    </Project>
    
  2. Creare un pacchetto NuGet eseguendo il comando dotnet pack:

    dotnet pack
    

    Il file microsoft.botsay.1.0.0.nupkg viene creato nella cartella identificata dal valore <PackageOutputPath> del file microsoft.botsay.csproj, che in questo esempio è la cartella ./nupkg.

    Per rilasciare pubblicamente uno strumento, caricarlo in https://www.nuget.org. Quando lo strumento è disponibile in NuGet, gli sviluppatori possono installarlo usando il comando dotnet tool install. Per questa esercitazione si installa il pacchetto direttamente dalla cartella nupkg locale, quindi non è necessario caricare il pacchetto in NuGet.

Risoluzione dei problemi

Se compare un messaggio di errore durante l'esercitazione, vedi Risolvere i problemi di utilizzo degli strumenti .NET.

Passaggi successivi

In questa esercitazione è stata creata un'applicazione console ed è stata inserita in un pacchetto come strumento. Per informazioni su come usare lo strumento come strumento globale, passare all'esercitazione successiva.

Se si preferisce, è possibile ignorare l'esercitazione sugli strumenti globali e passare direttamente all'esercitazione sugli strumenti locali.