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スクリプトはパスが切られた場所に保存すると便利でしょう。


コメント