はじめに
今回はローカルにあるnupkg
から.NET Toolとしてインストールをして利用する方法を紹介したいと思います。
概要
nuget.org
からインストールする際にはあまり意識したことはないかもしれませんが、GitHub Packagesのprivateなpackageなどそれ以外の場所からpackage取得するにはnuget.config
が重要になります。
nuget.config
にはどこからパッケージを取得できるようにするかを設定ができます。また認証情報が必要な場合はpackageSourceCredentials
を設定してあげたりします。nuget.org
はデフォルトで設定されているのでnuget.org
しか利用しない場合は意識することがないというわけです。
NuGetレジストリの利用 - GitHub Docs
流れとしては以下の通り。
1. .nupkg
を作成する
2. nuget.config
でローカルレポジトリの設定をする
3. インストールを行いdotnet-tools.json
に情報を書き込む
nupkgの作成方法
これは書く必要もないかもしれませんが、nupkg
を作成するにはdotnet pack
を利用します。
$ dotnet pack Determining projects to restore... /Users/----/Hoge.csproj を復元しました (223 ミリ秒)。 Hoge -> /Users/----/bin/Release/net8.0/Hoge.dll パッケージ '/Users----/bin/Release/Hoge.1.0.0.nupkg' が正常に作成されました。
またローカルで.NET Tool
として利用したい場合は、出力先フォルダも指定しておくとやりやすいです。
$ dotnet pack -o packages-local
それか.csproj
で出力先フォルダを指定するのもありです。
<PackageId>SampleTool</PackageId> <PackAsTool>true</PackAsTool> <ToolCommandName>SampleTool</ToolCommandName> <PackageOutputPath>./packages-local</PackageOutputPath>
以下は組み込んだ例です。
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>net8.0</TargetFramework> <ImplicitUsings>enable</ImplicitUsings> <Nullable>enable</Nullable> <PackageId>SampleTool</PackageId> <PackAsTool>true</PackAsTool> <ToolCommandName>SampleTool</ToolCommandName> <PackageOutputPath>./packages-local</PackageOutputPath> </PropertyGroup> </Project>
nuget.configの作成方法
以下のコマンドでテンプレートを作成できます。
$ dotnet new nugetconfig テンプレート "NuGet Config" が正常に作成されました。
<?xml version="1.0" encoding="utf-8"?> <configuration> <packageSources> <!--To inherit the global NuGet package sources remove the <clear/> line below --> <clear /> <add key="nuget" value="https://api.nuget.org/v3/index.json" /> </packageSources> </configuration>
ローカルバッケージを追加したい場合は、.nupkg
が入っているフォルダへのパスを記述します。
<add key="local" value="./packages-local" />
以下は実際に組み込んだ例です。
<?xml version="1.0" encoding="utf-8"?> <configuration> <packageSources> <!--To inherit the global NuGet package sources remove the <clear/> line below --> <clear /> <add key="nuget" value="https://api.nuget.org/v3/index.json" /> <add key="local" value="./packages-local" /> </packageSources> </configuration>
dotnet tool installを行う
これで設定は完了です。実際にdotnet tool install
を行い、無事に.NET Tool
としてインストールされdotnet-tools.json
に情報が記述されるか確認してみます。
また.config/dotnet-tools.json
をまだ作成していない場合は、以下のコマンドを実行します。
$ dotnet new tool-manifest
準備は整ったのでインストールしてみます。
# SampleToolの箇所はそれぞれ適切な名前に変更してください $ dotnet tool install SampleTool 次のコマンドを使用してこのディレクトリからツールを呼び出すことができます: 'dotnet tool run SampleTool' または 'dotnet SampleTool'。 ツール 'sampletool' (バージョン '1.0.0') が正常にインストールされました。マニフェスト ファイル /Users/----/.config/dotnet-tools.json にエントリが追加されました。
正しく動作していればdotnet-tools.json
に書き込まれているはずです。
{ "version": 1, "isRoot": true, "tools": { "sampletool": { "version": "1.0.0", "commands": [ "SampleTool" ], "rollForward": false } } }