C#のコンソールアプリをグローバル ツールとしてインストールする。

コンピュータ

C#のコンソールアプリをパッケージ管理システムのような感じに、

インストール・アンインストールする仕組みがあるので、

試してみたいと思います。

プロジェクトの作成

dotnet new console -n hello
cd hello
code .

ソースコード

ファイル名:hello.csproj

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net10.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>

    <!-- 追加 ここから -->
    <PackAsTool>true</PackAsTool> 
    <ToolCommandName>hello</ToolCommandName>
    <IsPackable>true</IsPackable>
    <PackageId>hello</PackageId>
    <Version>1.0.0</Version>
    <!-- 追加 ここまで -->

  </PropertyGroup>

</Project>

ファイル名:Program.cs

// See https://aka.ms/new-console-template for more information
Console.WriteLine("Hello, World!");

pack → インストール

dotnet pack -c Release
dotnet tool install --global hello --add-source .\bin\Release

実行

hello
#Hello, World!

パスが切られた場所にインストールされるので、ファイル名のみでコマンドが実行できます。

インストールされる場所

PS J:\git\MayworkCs\hello> ls $Env:USERPROFILE\.dotnet\tools

    Directory: C:\Users\karet\.dotnet\tools

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d----          2026/02/02    15:52                .store
-a---          2025/07/13    10:45         155648 dotnet-script.exe
-a---          2026/02/02    15:52         162304 hello.exe

hello.exeを確認

インストール済みアプリの一覧を取得

dotnet tool list --global
パッケージ ID           バージョン      コマンド
-------------------------------------------
dotnet-script      1.6.0      dotnet-script
hello              1.0.0      hello

helloを確認

アンインストール

アンインストールコマンド

 dotnet tool uninstall --global hello
ツール 'hello' (バージョン '1.0.0') は正常にアンインストールされました。

プロジェクト作成&インストールPowerShellスクリプト

New-ToolProj.ps1

# グローバルツールとして登録出来るC#コンソールプロジェクト作成スクリプト

# カレントディレクトリ名をプロジェクト名(=ツール名)とする
$ProjectName = Split-Path -Leaf (Get-Location)

# すでに csproj があるなら二重作成を防ぐ
$csproj = Join-Path (Get-Location) "$ProjectName.csproj"
if (Test-Path $csproj) {
    Write-Error "既に csproj が存在します: $csproj"
    exit 1
}

# 1つ上のディレクトリでプロジェクト作成して、作成されたフォルダへ移動
$parent = Split-Path -Parent (Get-Location)
Set-Location $parent
dotnet new console -n $ProjectName

Set-Location (Join-Path $parent $ProjectName)

# 追記する PropertyGroup(.NET tool 化)
$toolProps = @"
  <PropertyGroup>
    <PackAsTool>true</PackAsTool>
    <ToolCommandName>$ProjectName</ToolCommandName>
    <IsPackable>true</IsPackable>
    <PackageId>$ProjectName</PackageId>
    <Version>1.0.0</Version>
  </PropertyGroup>
"@

# csproj に追記
[xml]$xml = Get-Content $csproj
$projectNode = $xml.Project
$fragment = $xml.CreateDocumentFragment()
$fragment.InnerXml = $toolProps
$projectNode.AppendChild($fragment) | Out-Null
$xml.Save($csproj)

# エディタを開く(任意)
code .

PackInstall-ToolProj.ps1

# C#コンソールアプリをグローバルツールとしてインストールするスクリプト

# カレントディレクトリ名をツール名とする
$ProjectName = Split-Path -Leaf (Get-Location)

# csproj の存在チェック
$csproj = Join-Path (Get-Location) "$ProjectName.csproj"
if (-not (Test-Path $csproj)) {
    Write-Error "csproj が見つかりません: $csproj"
    exit 1
}

# Release で pack
dotnet pack -c Release

# nupkg のあるディレクトリ
$packageDir = ".\bin\Release"

# グローバル tool をインストール
dotnet tool install --global $ProjectName --add-source $packageDir

使い方
まずプロジェクト用のディレクトリを作成しカレントディレクトリを移動

cd (mkdir プロジェクト名)

New-ToolProj.ps1を実行すると、プロジェクトが作成されvscodeが起動されます。

ソースコードが完成したら、PackInstall-ToolProj.ps1を実行しグローバルツールとしてインストールします。

PowerShellスクリプトはパスが切られた場所に保存すると便利でしょう。

コメント