Start Debugging

dotnetup パブリックプレビュー: 1 つのコマンドで global.json が固定する SDK をインストール

dotnetup は 2026-10-15 にパブリックプレビューになりました。リポジトリ内で dotnetup sdk install を実行すると global.json を読み取り、rollForward を更新チャンネルに対応付け、新しいパッチバージョンをファイルに書き戻すこともできます。

2026-10-15 に Microsoft は、.NET SDK とランタイム向けの rustup 型ツールチェーンマネージャーである dotnetup のパブリックプレビューを発表しました。6 月に最初に書いたときは、ソースからビルドする必要があり、動作が確認されていたのは dotnetup sdk install preview だけでした。現在は 1 行のインストーラー、Microsoft Learn のコマンドリファレンスが用意され、私が最も気にしていた疑問、つまり global.json をどう扱うのかにも答えが出ています。

マシンへのインストール

ブートストラップスクリプトは最新の preview ビルドをダウンロードし、SHA-512 チェックサムを検証して ~/.dotnetup に配置します。sudo は不要です。

# macOS / Linux (x64 and Arm64, glibc and musl)
curl -fsSL https://aka.ms/dotnetup/get-dotnetup.sh | bash

# then, non-interactively
dotnetup install latest
dotnetup env set shell

Windows では PowerShell の同等コマンドは irm https://aka.ms/dotnetup/get-dotnetup.ps1 | iex です。Windows の既定値には注意してください。dotnetup init は everywhere モードを提案しますが、これはシステムの PATH を変更し、DOTNET_ROOT を設定します。すると、管理対象のインストールが Visual Studio がインストールした SDK より優先されるため、dotnetup にないマシン全体の SDK を必要とするプロジェクトはビルドできなくなります。すべてを移行する予定がなければ、shell か none を選んでください。

試すのに最も面白いのは none モードです。PATH と DOTNET_ROOT には触れず、代わりにコマンドを転送します。

dotnetup env set none --dotnetup-on-path true
dotnetup dotnet -- --info
dotnetup dotnet build

global.json が追跡される要件になる

リポジトリ内でチャンネルを指定せずに dotnetup sdk install を実行します。カレントディレクトリから上方向にたどって最も近い global.json を使用し、見つからない場合は latest にフォールバックします。ファイルの形式が不正な場合、コマンドは失敗します。親ディレクトリに黙ってフォールバックすることはありません。

{
  "sdk": {
    "version": "10.0.103",
    "rollForward": "latestPatch"
  }
}

重要なのは、dotnetup が 10.0.103 をインストールするだけではない点です。rollForward を、dotnetup update が更新し続けるチャンネルに変換します。

rollForward追跡されるチャンネル
省略または latestPatch10.0.1xx
latestFeature10.0
latestMinor10
latestMajorlatest
disable, patch, feature, minor, major厳密な 10.0.103、更新されない

allowPrerelease はチャンネルに影響しません。dotnetup list は各要件の取得元として global.json のパスを表示するので、どのリポジトリが古い SDK を残しているのかがわかります。どこからも参照されなくなった SDK は、次回の更新で削除されます。

パッチを global.json に書き戻す

これは私にとって新しい機能で、再現可能なビルドのために正確なパッチバージョンを固定しているリポジトリにとても便利です。

dotnetup sdk install --update-global-json
# later, across every tracked repo
dotnetup sdk update --update-global-json

導出されたチャンネルの最新 SDK をインストールし、sdk.version だけを書き換えます。書式、他のプロパティ、ファイルの文字エンコーディングは保持されます。これにより、Patch Tuesday ごとの Dependabot 型の PR や手作業での編集が不要になります。

プレビュー版の粗い部分

異なる .NET 10 のフィーチャーバンドに固定された複数のリポジトリを扱っているなら、リポジトリごとの dotnetup sdk install と週 1 回の dotnetup update の組み合わせは、すでに dotnet-install スクリプトより優れた運用です。フィードバックは dotnet/sdk の dotnetup ディスカッションへどうぞ。

Comments

Sign in with GitHub to comment. Reactions and replies thread back to the comments repo.

< 戻る