已安装 .NET 运行时,但程序仍提示未安装

运行一个 C# 编写的程序,弹出如下提示:

dotnet

实际上系统已经安装 .NET Runtime 8.0,不过还是尝试通过错误消息中的链接下载 .NET Desktop Runtime 8.0 并重新安装。再次运行程序,仍然提示以上错误。

当前系统情况如下:

which dotnet 查看 dotnet 命令的路径:

C:\Program Files\dotnet\dotnet.exe

命令并非是 Scoop 安装的版本,应该是通过 Visual Studio 安装到系统的。

如果系统中没有安装 which 命令,可以用以下命令替代:

  1. CMD:where dotnet
  2. PowerShell:(Get-Command dotnet).Source

运行 dotnet --info 查看信息:

.NET SDK:
 Version:           9.0.102
 Commit:            cb83cd4923
 Workload version:  9.0.100-manifests.4a54b1a6
 MSBuild version:   17.12.18+ed8c6aec5

运行时环境:
 OS Name:     Windows
 OS Version:  10.0.19045
 OS Platform: Windows
 RID:         win-x64
 Base Path:   C:\Program Files\dotnet\sdk\9.0.102\

已安装 .NET 工作负载:
没有要显示的已安装工作负载。
配置为在安装新清单时使用 loose manifests。

Host:
  Version:      9.0.1
  Architecture: x64
  Commit:       c8acea2262

.NET SDKs installed:
  9.0.102 C:\Program Files\dotnet\sdk]

.NET runtimes installed:
  Microsoft.AspNetCore.App 8.0.12 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 9.0.1 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.NETCore.App 6.0.36 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 7.0.20 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 8.0.12 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 9.0.1 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.WindowsDesktop.App 6.0.36 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
  Microsoft.WindowsDesktop.App 7.0.20 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
  Microsoft.WindowsDesktop.App 8.0.12 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
  Microsoft.WindowsDesktop.App 9.0.1 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]

Other architectures found:
  x86   [C:\Program Files (x86)\dotnet]
    registered at [HKLM\SOFTWARE\dotnet\Setup\InstalledVersions\x86\InstallLocation]

Environment variables:
  DOTNET_ROOT       [C:\scoop\apps\dotnet-sdk\current]

global.json file:
  Not found

Learn more:
  https://aka.ms/dotnet/info

Download .NET:
  https://aka.ms/dotnet/download

结果中可以发现,.Net 8.0 运行时确实已经安装了,默认的 .Net SDK 是 9.0 版本。从安装路径可以得知,这并非是 Scoop 安装的版本。也许是程序优先检测到了 .Net SDK 9.0 自带的运行时,而没有使用已安装的 .Net Runtime 8.0。

通过 Scoop 安装 .Net Runtime 8.0:

powershellscoop install versions/dotnet-sdk-lts

再次用 which dotnet 查看 dotnet 命令的路径:

C:\scoop\apps\dotnet-sdk-lts\current\dotnet.exe

已经是 Scoop 安装的版本了。

运行 dotnet --info 查看信息:

.NET SDK:
 Version:           8.0.405
 Commit:            fb1830d421
 Workload version:  8.0.400-manifests.c7afa696
 MSBuild version:   17.11.9+a69bbaaf5

运行时环境:
 OS Name:     Windows
 OS Version:  10.0.19045
 OS Platform: Windows
 RID:         win-x64
 Base Path:   C:\scoop\apps\dotnet-sdk-lts\current\sdk\8.0.405\

已安装 .NET 工作负载:
配置为在安装新清单时使用 loose manifests。
没有要显示的已安装工作负载。

Host:
  Version:      8.0.12
  Architecture: x64
  Commit:       89ef51c5d8

.NET SDKs installed:
  8.0.405 [C:\scoop\apps\dotnet-sdk-lts\current\sdk]

.NET runtimes installed:
  Microsoft.AspNetCore.App 8.0.12 [C:\scoop\apps\dotnet-sdk-lts\current\shared\Microsoft.AspNetCore.App]
  Microsoft.NETCore.App 8.0.12 [C:\scoop\apps\dotnet-sdk-lts\current\shared\Microsoft.NETCore.App]
  Microsoft.WindowsDesktop.App 8.0.12 [C:\scoop\apps\dotnet-sdk-lts\current\shared\Microsoft.WindowsDesktop.App]

Other architectures found:
  x86   [C:\Program Files (x86)\dotnet]
    registered at [HKLM\SOFTWARE\dotnet\Setup\InstalledVersions\x86\InstallLocation]

Environment variables:
  DOTNET_ROOT       [C:\scoop\apps\dotnet-sdk-lts\current]

global.json file:
  Not found

Learn more:
  https://aka.ms/dotnet/info

Download .NET:
  https://aka.ms/dotnet/download

再次运行原来的程序,成功~