はじめに
今回はローカルにある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 } } }