つばろぐ

主に C#, .NET, Azure の備忘録です。たまに日記。

アンインストールできない .NET SDK をアンインストールする

おことわり

※本記事で紹介する内容はおそらく正規の手順ではないため、参考にする場合は自己責任の元で作業するようお願いします。*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 しか表示されないのである。

f:id:tech-tsubaki:20211114221912p:plain

.NET にはアンインストールツールが用意されており、不要な SDK を一括でアンインストールすることができる。
普段はこのアンインストールツールで済むのだが、今回は 中途半端に残っている SDK をアンインストールする 方法を調べた。

解決方法

なかなか情報が見当たらなかったが、この Issue で近しいやり取りが行われていた。

github.com

どうやら Visual Studio に同梱されていた SDK が VS と一緒にアンインストールされずに残ったのではないか、ということ。まぁそれはありそう。
解決方法としては、レジストリから該当のアンインストーラーを探して msiexec コマンドで実行する方法。

docs.microsoft.com

アンインストーラーの検索

例えば .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

するとアンインストーラーでアンインストールを開始することができる。

f:id:tech-tsubaki:20211114224518p:plain

f:id:tech-tsubaki:20211114224530p:plain


冒頭でも言ったように正規の手順ではないため、参考にする場合は自己責任の元で作業するようお願いします。

*1:なので会社ブログに書くことは避けた