yotiky Tech Blog

とあるエンジニアの備忘録

.NET Core ツール

.NET Core ツール

dotnet コマンドで、tool SDK コマンドを使うと、 NuGet パッケージを使ったツールの管理をすることができます。

コマンド 説明
dotnet tool install ツールをインストールする
dotnet tool list インストールされているグローバルツールやローカル ツールの一覧と呼び出すコマンド名なども表示する
dotnet tool uninstall ツールをアンインストールする
dotnet tool update ツールをアップデートする

インストール

グローバルツール

グローバルツールとしてインストールする場合は、-g もしくは --global オプションを使用します。

dotnet tool install -g MessagePack.Generator
dotnet tool install --global MessagePack.Generator

既定のインストール先は、C:\Users\[your name]\.dotnet\tools です。

インストール場所を任意のパスにするには、--tool-path オプションを使用します。 この方法は環境変数に追加されないので、適宜対応する必要があります。

dotnet tool install MessagePack.Generator --tool-path C:\dotnet\tools

ローカルツール

ローカルツールとしてインストールする場合は、マニフェストファイルを追加する必要があります。ローカルツールは、現在のディレクトリとそのサブディレクトリが対象となります。そのため、通常はリポジトリのルートに追加します。

マニフェストファイルは、.config\dotnet-tools.json に作成されます。

dotnet new tool-manifest
dotnet tool install MessagePack.Generator

マニフェストファイルの次の通りになります。

{
  "version": 1,
  "isRoot": true,
  "tools": {
    "messagepack.generator": {
      "version": "2.2.60",
      "commands": [
        "mpc"
      ]
    }
  }
}

リポジトリからクローンした場合は、ツールがインストールされていないので、ルートディレクトリで復元を実行します。

dotnet tool restore

また、特定のバージョンをインストールして使いたい場合は、--version オプションを使用することができます。バージョン番号は、NuGet Gallery などで確認できます。

dotnet tool install MessagePack.Generator --version 2.1.80

ツールを使用する

コマンドを確認する

インストールしたツールのコマンドは dotnet tool list で確認できます。グローバルツールを確認する場合は、-gオプションを使用します。

> dotnet tool list -g

パッケージ ID                   バージョン       コマンド
-------------------------------------------
messagepack.generator      2.2.60      mpc
dotnet-mlb                 0.4.1       dotnet-mlb

ローカルツールを確認する場合は次のようになります。

> dotnet tool list

パッケージ ID                   バージョン       コマンド      マニフェスト                                             
----------------------------------------------------------------------------------------------------
messagepack.generator      2.2.60      mpc       C:\Project\DotnetSampleProject\.config\dotnet-tools.json

グローバルツールを呼び出す

グローバルツールの場合は、ツールコマンドを単独で呼び出します。

mpc
dotnet-mlb

コマンドのプレフィックスdotnet- が付いている場合は、dotnet コマンドを使うこともできます。呼び出す時は、プレフィックス部分の省略します。

dotnet mlb

dotnet コマンドを使う場合は、ローカルツールの呼び出し方と同じになるため、ローカルツールを利用している環境では注意が必要です。

ローカルツールを呼び出す

ローカルツールの場合は、dotnet コマンドを使用します。プレフィックスは省略してもしなくても呼び出せます。 また、マニフェストをインストールしたディレクトリ内で実行する必要があります。

dotnet mpc
dotnet dotnet-mlb
dotnet mlb

プレフィックス dotnet-

.NET Core のツールは、パッケージを作成する時に ToolCommandName を設定します。NuGet で提供される実行ファイルは、<ToolCommandName>.exe になります。 この名前にプレフィックス dotnet- を付けると、提供される実行ファイルの名前も dotnet-<ToolCommandName>.exe となります。

ToolCommandName 実行ファイル名 グローバル ローカル
ToolName <ToolName>.exe ToolName dotnet ToolName
dotnet-ToolName dotnet-<ToolName>.exe dotnet-ToolName
dotnet ToolName
dotnet dotnet-ToolName
dotnet ToolName

f:id:yotiky:20201107181505p:plain

参考