Windowsで「.NET 6.0.25 を削除したはずなのに dotnet --list-runtimes に残る」「同じ行が2回出る」という現象は、ランタイム本体がまだ残っているか、参照している dotnet が複数あって表示が重複しているケースが多いです。確実に消すための確認ポイントと手順をまとめます。
症状:.NET 6.0.25 をアンインストールしたのに dotnet --list-runtimes に残る
ご質問の状況は、次のように「6.0.25 が残っている(しかも同じ行が2回出る)」状態です。
Microsoft.NETCore.App 6.0.25
Microsoft.WindowsDesktop.App 6.0.25
ここで大事なのは、dotnet --list-runtimes は「いま実行している dotnet が見つけたランタイムの実体」を列挙している、という点です。つまり、表示されるなら多くの場合そのバージョンのランタイム(フォルダーや登録情報)がまだ残っています。
まず押さえる:表示されている2つの意味(.NET Runtime と Windows Desktop Runtime)
dotnet --list-runtimes に出る代表的な項目は、用途が少し違います。今回出ている2つは、ざっくり言うと次の関係です。
| 表示名 | 役割 | よく対応するインストール項目(例) | 残りやすい理由 |
|---|---|---|---|
Microsoft.NETCore.App 6.0.25 | .NETの基本ランタイム(コンソール/サービス等も含む) | .NET Runtime 6.0.25(x64 / x86 など) | SDKやDesktop Runtime、Visual Studioなど別経路で残る |
Microsoft.WindowsDesktop.App 6.0.25 | Windowsデスクトップ向け(WPF/WinForms 等) | Windows Desktop Runtime 6.0.25(x64 / x86 など) | Desktop Runtimeだけ消し忘れ、またはx86が残る |
つまり「.NETを消したつもり」でも、実際には Runtime / Desktop Runtime / ASP.NET Core Runtime / SDK のどれを消したかで残り方が変わります。特に x64 と x86 が別項目で入っていると、片方だけ残って「消したのに残る」状態になりがちです。
最短で原因を切り分けるチェック(最初にここだけやる)
削除に入る前に、次の3点を確認すると迷いが減ります。コマンドは「コマンドプロンプト」でも「PowerShell」でも構いません。
チェック1:いま実行している dotnet はどれか(複数あるか)
まず「どの dotnet.exe を叩いているか」を確認します。複数出る場合、PATH が混在している可能性が高いです。
where dotnet
よくあるパターン:
C:\Program Files\dotnet\dotnet.exe(一般的なシステム全体のインストール)C:\Program Files (x86)\dotnet\dotnet.exe(32bit版が入っている場合)C:\Users\(ユーザー)\AppData\Local\Microsoft\dotnet\dotnet.exe(ユーザー単位の導入がある場合)
ここで複数出たら、「残っている」以前に参照先が複数で、表示や挙動がややこしくなります(後述の「2回表示」対策にも直結します)。
チェック2:6.0.25 の “場所” を見る
dotnet --list-runtimes は通常、各ランタイムのインストール場所も併記します。同じ 6.0.25 でも場所が違うなら、実体が複数(x64/x86、ユーザー/システム)という判断ができます。
dotnet --list-runtimes
表示例(イメージ):
Microsoft.NETCore.App 6.0.25 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.WindowsDesktop.App 6.0.25 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
チェック3:SDKが残っていないか
SDK が残っていると、関連ランタイムも残っている(または再導入される)ことがあります。開発PCなら特に確認します。
dotnet --list-sdks
結論:表示されるなら「多くの場合まだ残っている」ので、アンインストール経路を正しく踏む
ここからが本題です。削除の基本方針はシンプルで、インストールした方法に合わせてアンインストールすることです。
- Windowsの「インストールされているアプリ」から、6.0.25 の該当コンポーネントを個別に削除
- Visual Studio 由来なら、Visual Studio Installer 側で削除
- 取りこぼしがある/確実にやりたいなら、公式の .NET Uninstall Tool でバージョン指定削除
Microsoft公式の案内として、SDK/ランタイムの削除手順と、.NET Uninstall Tool の利用が紹介されています(公式ドキュメント)。
- Microsoft Learn: Remove the .NET runtime and SDK
- Microsoft Learn: dotnet-core-uninstall remove command
手順1:Windowsの「インストールされているアプリ」から 6.0.25 を狙って消す
まずは王道の手順です。ここで消せるなら、それが一番安全で後腐れが少ないです。
削除対象を取り違えないコツ
「.NET」と一口に言っても、表示される項目が複数あります。6.0.25 を確実に消すには、名称だけでなく “バージョン” と “種類” を見て消すのがコツです。
| アプリ一覧で探す名前の例 | 対応しやすい --list-runtimes の表示 | 消し忘れやすいポイント |
|---|---|---|
| .NET Runtime 6.0.25(x64 / x86) | Microsoft.NETCore.App 6.0.25 | x86だけ残る/Runtimeを消したつもりでSDKが残る |
| Windows Desktop Runtime 6.0.25(x64 / x86) | Microsoft.WindowsDesktop.App 6.0.25 | Desktop Runtimeだけ別項目で残る |
| ASP.NET Core Runtime 6.0.25 | Microsoft.AspNetCore.App 6.0.25 | Web系の実行環境として残りやすい |
| .NET SDK 6.0.25 | (SDKは dotnet --list-sdks 側) | 開発用。Visual Studioから入っていることが多い |
具体的な操作手順
- Windowsの設定を開き、「アプリ」→「インストールされているアプリ(Apps & features)」へ進む
- 検索欄に .net(または runtime / desktop / asp.net / sdk)を入れて絞り込む
- 一覧から 6.0.25 のものを探し、Runtime / Desktop Runtime / ASP.NET Core Runtime / SDK を必要に応じてアンインストール
- アンインストール後、いったんターミナルを閉じて開き直し、
dotnet --list-runtimesで再確認
「Visual Studio 由来」と出る場合の注意
アプリ一覧に “Visual Studio” っぽい表示があったり、開発PCで Visual Studio を使っている場合は、Visual Studio Installer 側が管理しているコンポーネントとして入っていることがあります。この場合、Windows設定側から無理に消そうとすると中途半端になりやすいので、基本は Visual Studio Installer で「変更(Modify)」→「個別のコンポーネント」や「ワークロード」を見て、該当する .NET 関連コンポーネントを調整します(公式ドキュメントでも “Visual Studio 由来のものは VS 側で” という趣旨が案内されています)。
手順2:公式の .NET Uninstall Tool で 6.0.25 をバージョン指定削除(推奨)
「設定から消したのに残る」「何が残っているか追いかけるのが面倒」「確実に 6.0.25 だけを落としたい」というときは、.NET Uninstall Tool(公式のアンインストールツール)が一番確実です。
Microsoft Learn では、不要になった SDK/ランタイムを削除する手段として .NET Uninstall Tool が案内されています。
Microsoft Learn: Remove the .NET runtime and SDK
基本フロー(一覧 → 確認 → 削除)
まず一覧を出して、6.0.25 が残っていることを確認します。
dotnet-core-uninstall list --runtime
次に、6.0.25 をバージョン指定で削除します(例)。
dotnet-core-uninstall remove --runtime 6.0.25 -y
この remove コマンドの詳細や注意点は、公式ドキュメントにまとまっています。
Microsoft Learn: dotnet-core-uninstall remove command
実務でハマりやすいポイント(必ず読んでから実行)
- 管理者権限が必要になることがあります。うまく削除できない場合は、管理者としてターミナルを開き直して実行します。
- 環境によっては Visual Studio が必要と判断したものは既定で残す挙動になります。開発環境を壊さないための安全策です。
--forceのような強制オプションが用意されていますが、開発環境や既存アプリが動かなくなる可能性があるため、安易に使わない方が安全です。
削除後の確認(“残っているか” を確実に判定する)
削除後は、必ず次の順番で確認します。
- ターミナルを閉じて開き直す(PATHの反映のため)
dotnet --list-runtimesを実行し、6.0.25が消えたか見る- まだ残るなら
where dotnetを再実行し、別のdotnet.exeを叩いていないか確認する
手順3:「同じ行が2回表示される」問題の原因と直し方
dotnet --info や dotnet --list-runtimes が 同じものを2回表示する現象は、必ずしも「ランタイムが2つ入っている」わけではありません。よくある原因として、環境変数 Path に同じパスが重複して入っている(大文字小文字の違い等で重複扱いになる)ケースが知られています。
実際に、c:\program files\dotnet と C:\Program Files\dotnet のような表記ゆれが原因で二重表示になるケースが報告されています。
GitHub: dotnet –info shows runtimes and sdks twice(Issue #10160)
重複表示の改善手順(安全な順)
where dotnetを実行し、dotnet.exeが複数あるか確認する- 複数ある場合は、どれを使うべきか決める(一般的には
C:\Program Files\dotnet\dotnet.exeが基準になりやすい) - Windowsの環境変数編集で、Path の中の
...\dotnetが重複していないかを確認する - 大文字小文字だけ違う同一パスや、明らかに不要な古いパスがあれば整理する
- ターミナルを開き直して
dotnet --list-runtimesを再確認する
「2回表示」=実害がないこともあるが、削除確認では邪魔になる
二重表示は、環境によっては見た目だけの問題で実害が出ないこともあります。ただし今回の目的は「削除したかどうかを確認する」ことなので、ランタイム実体の削除(前章の手順)と合わせて、表示の混乱要因(Path/複数dotnet)も整えておくと確実です。
手順4:それでも 6.0.25 が残るときの“よくある落とし穴”と対処
ここまでやっても残る場合、原因はだいたい次のどれかです。該当しそうなところから潰してください。
| 状況 | ありがちな原因 | 対処 |
|---|---|---|
アプリ一覧に 6.0.25 が見当たらないのに --list-runtimes には出る | 別経路(Visual Studio、ユーザー単位、x86/x64)のインストールが残っている | where dotnet と --list-runtimes の “パス” を見て、該当経路のアンインストールを探す/Uninstall Toolを使う |
Microsoft.NETCore.App は消えたが Microsoft.WindowsDesktop.App が残る | Desktop Runtime が別項目で残っている、またはx86だけ残っている | アプリ一覧で「Windows Desktop Runtime 6.0.25(x86/x64)」を探して削除/Uninstall Toolで指定削除 |
| 削除したのに、再起動/更新後に戻る | Visual Studio や別インストーラーが要件として再導入している | VS Installer側のワークロードやコンポーネントを確認。必要ならVSの更新方針を見直す |
| 同じ行が2回出て、どっちが本体かわからない | Pathの重複(表記ゆれ含む) | 環境変数Path整理 → ターミナル開き直し → 再確認 |
手作業でフォルダー削除が非推奨な理由(やるなら“最後の最後”)
「C:\Program Files\dotnet を消せばいいのでは?」と思いがちですが、これは基本的におすすめしません。理由は次の通りです。
- グローバルツールや他バージョンのランタイム/SDKも同居していることがあり、まとめて壊れる可能性がある
- Visual Studio と連携している環境だと、修復が面倒になりがち
- アンインストール情報が残って「インストールされているのに実体がない」中途半端な状態になりやすい
基本は、公式手順に沿って「インストールした方法に合わせて」アンインストールするのが安全です(公式ドキュメントでも、不要なSDK/ランタイムの削除手段として正規の手順が案内されています)。
Microsoft Learn: Remove the .NET runtime and SDK
実践:迷わないための“おすすめ手順”まとめ(この順にやると失敗しにくい)
最終的に「6.0.25 を確実に消したい」場合、次の順が分かりやすく、作業も戻しやすいです。
| 順番 | やること | 目的 | 確認コマンド |
|---|---|---|---|
| 1 | where dotnet で参照先を確認 | 複数dotnet/Path混在を把握する | where dotnet |
| 2 | dotnet --list-runtimes のパスを確認 | 6.0.25 の実体がどこにあるか特定 | dotnet --list-runtimes |
| 3 | Windowsのアプリ一覧で 6.0.25 を狙って削除 | 正規のアンインストールで安全に消す | dotnet --list-runtimes |
| 4 | Visual Studio 由来なら VS Installer で調整 | 再導入や依存関係のトラブルを避ける | (再度)dotnet --list-runtimes |
| 5 | .NET Uninstall Tool で 6.0.25 を指定削除 | 取りこぼしをなくす(推奨) | dotnet-core-uninstall list --runtimedotnet-core-uninstall remove --runtime 6.0.25 -y |
| 6 | Path の重複(表記ゆれ)を整理 | 二重表示を防ぎ、確認を簡単にする | dotnet --list-runtimes |
よくある質問
「.NET 6.0.25 を消したらアプリが動かなくならない?」
可能性はあります。特に業務アプリや社内ツールが .NET 6 ランタイムに依存している場合、ランタイムを消すと起動できなくなります。削除前に、該当PCで動かしているアプリ(バッチ、サービス、クライアントソフト、ゲーム、ツール等)に影響がないか確認してください。開発PCなら、対象プロジェクトが必要とするSDK/ランタイムのバージョンも見直すのが安全です。
「6.0.25 だけ消して、6.0 系の別バージョンは残していい?」
バージョンを分けて共存できる設計なので、特定のパッチだけ消す運用自体はあり得ます。ただし、実運用としては “必要なバージョンだけ残す” が目的なら、公式ツールで対象バージョンを指定削除し、アプリ側が求めるバージョンに合わせて整理するのが安全です。
「Uninstall Tool の --force は使っていい?」
「どうしても消せない」「実験環境で完全に掃除したい」などの事情がない限り、慎重に扱うのが無難です。特に Visual Studio が依存しているものを強制削除すると、開発環境の修復(再インストールや修復インストール)が必要になることがあります。まずは list で対象を把握し、通常の remove を優先してください。
まとめ:.NET 6.0.25 が dotnet --list-runtimes に残るなら、まず“残っている実体”を正規手順で消す
Windowsの「アプリ一覧」から消したつもりでも、.NET はコンポーネントが分かれていたり、x64/x86、Visual Studio 由来、ユーザー単位導入などで “消したつもり”が起きやすいです。
確実に 6.0.25 を消すなら、(1) アプリ一覧で 6.0.25 の Runtime/Desktop Runtime を取り違えずに削除し、(2) 必要に応じて Visual Studio Installer を確認し、(3) 最後は公式の .NET Uninstall Tool でバージョン指定削除、という流れが最短です。あわせて Path の重複を整理すれば、「同じ行が2回出る」問題も改善しやすくなります。

コメント