次の方法で共有


チュートリアル: .NET CLI を使用して .NET ツールを作成する

この記事の対象: ✔️ .NET Core 2.1 SDK 以降のバージョン

このチュートリアルでは、.NET ツールを作成してパッケージ化する方法について説明します。 .NET CLI を使用すると、他のユーザーがインストールして実行できるコンソール アプリケーションをツールとして作成できます。 .NET ツールは、.NET CLI からインストールされる NuGet パッケージです。 ツールの詳細については、「 .NET ツールの概要」を参照してください。

作成するツールは、メッセージを入力として受け取り、ロボットの画像を作成するテキスト行と共にメッセージを表示するコンソール アプリケーションです。

これは、3 つのチュートリアルのシリーズの最初のチュートリアルです。 このチュートリアルでは、ツールを作成してパッケージ化します。 次の 2 つのチュートリアルでは、 ツールをグローバル ツールとして使用 し、 そのツールをローカル ツールとして使用します。 ツールを作成する手順は、グローバル ツールとして使用する場合でも、ローカル ツールとして使用する場合も同じです。

[前提条件]

  • .NET SDK 6.0.100 以降のバージョン。

    このチュートリアルでは .NET SDK 6.0 を使用しますが、.NET Core SDK 2.1 以降ではグローバル ツールを使用できます。 .NET Core SDK 3.0 以降では、ローカル ツールを使用できます。

  • 任意のテキスト エディターまたはコード エディター。

プロジェクトを作成する

  1. コマンド プロンプトを開き、 リポジトリという名前のフォルダーを作成します。

  2. リポジトリ フォルダーに移動し、次のコマンドを入力します。

    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>
    
  3. microsoft.botsay フォルダーに移動します。

    cd microsoft.botsay
    

コードを追加する

  1. コード エディターで Program.cs ファイルを開きます。

  2. Program.csのコードを次のコードに置き換えてください。

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

    using System.Reflection; ディレクティブは、次の手順で追加するコードで必要になります。

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

    引数が渡されない場合は、短いヘルプ メッセージが表示されます。 それ以外の場合、すべての引数は 1 つの文字列に連結され、次の手順で作成した ShowBot メソッドを呼び出して出力されます。

  4. 文字列パラメーターを受け取る ShowBot という名前の新しいメソッドを追加します。 このメソッドは、テキスト行を使用して、メッセージとロボットの画像を出力します。

    static void ShowBot(string message)
    {
        string bot = $"\n        {message}";
        bot += @"
        __________________
                          \
                           \
                              ....
                              ....'
                               ....
                            ..........
                        .............'..'..
                     ................'..'.....
                   .......'..........'..'..'....
                  ........'..........'..'..'.....
                 .'....'..'..........'..'.......'.
                 .'..................'...   ......
                 .  ......'.........         .....
                 .    _            __        ......
                ..    #            ##        ......
               ....       .                 .......
               ......  .......          ............
                ................  ......................
                ........................'................
               ......................'..'......    .......
            .........................'..'.....       .......
         ........    ..'.............'..'....      ..........
       ..'..'...      ...............'.......      ..........
      ...'......     ...... ..........  ......         .......
     ...........   .......              ........        ......
    .......        '...'.'.              '.'.'.'         ....
    .......       .....'..               ..'.....
       ..       ..........               ..'........
              ............               ..............
             .............               '..............
            ...........'..              .'.'............
           ...............              .'.'.............
          .............'..               ..'..'...........
          ...............                 .'..............
           .........                        ..............
            .....
    ";
        Console.WriteLine(bot);
    }
    
  5. 変更を保存します。

アプリケーションをテストする

プロジェクトを実行し、出力を確認します。 コマンド ラインで次のバリエーションを試して、さまざまな結果を確認してください。

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

--区切り記号の後にあるすべての引数がアプリケーションに渡されます。

ツールをパッケージ化する

アプリケーションをツールとしてパックして配布する前に、プロジェクト ファイルを変更する必要があります。

  1. microsoft.botsay.csproj ファイルを開き、<PropertyGroup> ノードの末尾に 3 つの新しい XML ノードを追加します。

    <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>
    
  2. dotnet pack コマンドを実行して NuGet パッケージを作成します。

    dotnet pack
    

    microsoft.botsay.1.0.0.nupkg ファイルは、microsoft.botsay.csproj ファイルの<PackageOutputPath>値で識別されるフォルダーに作成されます。この例では ./nupkg フォルダーです。

    ツールをパブリックにリリースする場合は、 https://www.nuget.orgにアップロードできます。 NuGet でツールを使用できるようになったら、開発者は dotnet ツールのインストール コマンドを使用してツールをインストールできます。 このチュートリアルでは、ローカル nupkg フォルダーから直接パッケージをインストールするため、パッケージを NuGet にアップロードする必要はありません。

トラブルシューティング

チュートリアルの実行中にエラー メッセージが表示される場合は、「.NET ツールの使用に関する問題のトラブルシューティング を参照してください。

次のステップ

このチュートリアルでは、コンソール アプリケーションを作成し、ツールとしてパッケージ化しました。 ツールをグローバル ツールとして使用する方法については、次のチュートリアルに進んでください。

必要に応じて、グローバル ツールのチュートリアルをスキップし、ローカル ツールのチュートリアルに直接移動できます。