おことわり
※本記事で紹介する内容はおそらく正規の手順ではないため、参考にする場合は自己責任の元で作業するようお願いします。*1
起こったこと
自宅PCに .NET 6.0 をインストールしたり Visual Studio 2022 を Preview から Current に更新したタイミングで、 dotnet --list-sdks
でリストアップされる .NET SDK のなかに実際には既にアンインストールしたはずのものが出力されるようになった。
$ dotnet --list-sdks 3.1.402 [C:\Program Files\dotnet\sdk] 5.0.201 [C:\Program Files\dotnet\sdk] 5.0.202 [C:\Program Files\dotnet\sdk] 5.0.300 [C:\Program Files\dotnet\sdk] 5.0.402 [C:\Program Files\dotnet\sdk] 6.0.100-preview.5.21302.13 [C:\Program Files\dotnet\sdk] 6.0.100-rc.1.21458.32 [C:\Program Files\dotnet\sdk] 6.0.100-rc.2.21505.57 [C:\Program Files\dotnet\sdk] 6.0.100 [C:\Program Files\dotnet\sdk]
上記のうち 3.1, 5.0., 6.0.-preview, 6.0.*-rc などは既にアンインストールしたつもりなのだが、なぜかインストール済みSDKの一覧に表示されてしまっていた。
しかし Windows 設定のアプリページでは .NET 6.0 SDK しか表示されないのである。
VS2022 Previewのワークロードを削除したらなぜかSDK増えたんだけどw pic.twitter.com/ZOw4DWUZck
— Yuta Mataumura / MLBお兄さん (@tsubakimoto_s) 2021年11月8日
.NET にはアンインストールツールが用意されており、不要な SDK を一括でアンインストールすることができる。
普段はこのアンインストールツールで済むのだが、今回は 中途半端に残っている SDK をアンインストールする 方法を調べた。
解決方法
なかなか情報が見当たらなかったが、この Issue で近しいやり取りが行われていた。
どうやら Visual Studio に同梱されていた SDK が VS と一緒にアンインストールされずに残ったのではないか、ということ。まぁそれはありそう。
解決方法としては、レジストリから該当のアンインストーラーを探して msiexec
コマンドで実行する方法。
アンインストーラーの検索
例えば .NET 5.0.202 SDK をアンインストールする場合、以下のようにアンインストーラーを検索する。
C:\>reg query HKLM\SOFTWARE\Microsoft\Windows\currentversion\uninstall /s /d /f "5.0.202" HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\currentversion\uninstall\{7906F4D3-6474-4337-B227-17067C079A83} InstallSource REG_SZ C:\ProgramData\Microsoft\VisualStudio\Packages\Microsoft.NetCore.Templates.5.0.5.0.202-servicing.21201.18,version=16.9.31202.62,chip=x64\ DisplayName REG_SZ Microsoft .NET Core 5.0 Templates 5.0.202 (x64) HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\currentversion\uninstall\{DBC14914-FB00-46EC-8DC5-AC701F9A0A91} InstallSource REG_SZ C:\ProgramData\Microsoft\VisualStudio\Packages\Microsoft.NetCore.Toolset.5.0.202,version=16.9.31202.62,chip=x64\ DisplayName REG_SZ Microsoft .NET Toolset 5.0.202 (x64) 検索の完了: 該当 4 件
アンインストーラーの実行
該当するレジストリがあれば GUID をコピーしておく。
上記のコマンド結果であれば {7906F4D3-6474-4337-B227-17067C079A83}
や {DBC14914-FB00-46EC-8DC5-AC701F9A0A91}
である。
この GUID を指定してアンインストーラーを実行する。
C:\>msiexec /x {7906F4D3-6474-4337-B227-17067C079A83} IGNOREDEPENDENCIES=ALL ALLOWMSIUNINSTALL=1
するとアンインストーラーでアンインストールを開始することができる。
冒頭でも言ったように正規の手順ではないため、参考にする場合は自己責任の元で作業するようお願いします。
*1:なので会社ブログに書くことは避けた