如何删除 .NET 运行时和 SDK

经过一段时间后,在安装 .NET 运行时和 SDK 的更新版本时,你可能需要从计算机中删除过时的 .NET 版本。 如 .NET 版本选择一文中详述,卸载旧版运行时可能会更改为运行共享框架应用程序所选择的运行时。

是否应删除某个版本?

借助 .NET 版本选择行为和 .NET 各个更新之间的运行时兼容性,可安全地删除以前的版本。 .NET 运行时更新在主要版本 (如 8.x 和 7.x)内兼容。 此外,较新版本的 .NET SDK 通常能够兼容地生成面向运行时早期版本的应用程序。

通常,只需要应用程序所需的最新 SDK 和运行时的最新补丁版本。 需要保留旧版 SDK 或运行时版本的实例包括维护基于 project.json 的应用程序 。 除非应用程序有需保留早期 SDK 或运行时的特定原因,否则可以安全地删除旧版本。

确定安装内容

.NET CLI 提供了相关的选项,你可以使用它们来列出计算机上安装的 SDK 和运行时。 使用 dotnet --list-sdks 查看安装的 SDK 的列表,使用 dotnet --list-runtimes 查看运行时的列表。 有关详细信息,请参阅如何检查是否已安装 .NET

卸载 .NET

.NET 使用 Windows 应用 & 功能应用 > 已安装的应用设置页来删除 .NET 运行时和 SDK 的版本。 使用“开始”菜单搜索“添加或删除程序”以打开“设置”页面,如下图所示:此图显示了应用 & 功能对话框。 可以搜索 core 或 .net 来筛选和显示安装的 .NET 版本 。

显示文本“添加或删除”以筛选搜索结果的 Windows“开始”菜单

在“设置”页面中,搜索 .net 以查找计算机上安装的版本。 选择 ...>卸载以卸载项目。 如果使用的是 Windows 10,请选择与要卸载的项目对应的“卸载”按钮。 下图显示了 Windows 11 上的“已安装的应用”设置页面:

搜索栏中带有“.net”一词的Windows“已安装的应用”对话框。结果显示已安装的 .NET Framework 和 .NET 的版本。

重要

如果要卸载的项目指示它来自 Visual Studio,请使用Visual Studio 安装程序删除 .NET 的这些版本。

卸载 .NET 的最佳方法是镜像用来安装 .NET 的操作。 具体取决于所选择的 Linux 分发和安装方法。

预览版是手动安装的,必须手动卸载。 有关详细信息,请参阅脚本化或手动部分。

重要

有关 Red Hat 安装,请参阅 Red Hat Product Documentation for .NET(Red Hat .NET 产品文档)。

对于 .NET 安装,可以删除以下类型:

程序包管理器

除非从手动安装的预览版本进行升级,否则使用包管理器升级时无需先卸载 .NET SDK。 包管理器 updaterefresh 命令将在成功安装较新版本后自动删除旧版本。 如果已安装预览版本,请卸载该版本。

如果使用包管理器安装 .NET,则使用同一包管理器来卸载 .NET SDK 或运行时。 .NET 安装支持常用的包管理器。 有关环境中的精确语法,请查阅分发的包管理器文档:

  • apt-get(8) 由基于 Debian 的系统(包括 Ubuntu)使用。
  • yum (8) 用于 Fedora、CentOS Stream、Oracle Linux 和 RHEL。
  • zypper(8) 用于 openSUSE 和 SUSE Linux Enterprise System (SLES)。
  • dnf(8) 用于 Fedora。

几乎在所有情况下,删除包的命令都是 remove

大多数包管理器的 .NET SDK 安装包名称为 dotnet-sdk,后跟版本号。 只需要主版本号和次版本号:例如,可将 .NET SDK 8.0.200 版引用为包 dotnet-sdk-8.0

对于仅安装了运行时而未安装 SDK 的计算机,.NET 运行时的包名称为 dotnet-runtime-<version>,整个运行时堆栈的包名称为 aspnetcore-runtime-<version>

脚本化或手动

如果使用 dotnet-install 脚本或通过提取 tarball 来安装 .NET,则必须使用手动方法删除 .NET。

手动安装 .NET 时,它通常安装到 /usr/share/dotnet//usr/lib/dotnet/$HOME/.dotnet 目录中。 SDK、运行时和 .NET 主机安装到单独的子目录中。 这些“组件”目录包含每个 .NET 版本的目录。 通过删除版本控制目录,可以从系统中删除该版本的 .NET。 这些目录可能因你的 Linux 分发版而异。

可以使用三个命令来发现 .NET 的安装位置:dotnet --list-sdks(用于 SDK)、dotnet --list-runtimes(用于运行时)和 dotnet --info(用于所有内容)。 这些命令不会列出 .NET 主机。 若要确定安装了哪些主机,请检查 /usr/share/dotnet/host/fxr/ 目录。 以下列表表示特定版本的 .NET 的目录,其中 $version 变量表示 .NET 的版本:

  • SDK

    /usr/share/dotnet/sdk/$version/

  • 运行时

    运行时基于特定的 .NET 产品运行时,例如 Microsoft.AspNetCore.AllMicrosoft.NETCore.App(特别是 .NET 运行时)。 它们将安装到 /usr/share/dotnet/shared/$product/$version 目录,其中 $product 是产品运行时。 例如,可能会看到以下目录:

    /usr/share/dotnet/shared/Microsoft.NETCore.App/$version/
    /usr/share/dotnet/shared/Microsoft.AspNetCore.App/$version/
    /usr/share/dotnet/shared/Microsoft.AspNetCore.All/$version/
    
  • .NET 主机

    /usr/share/dotnet/host/fxr/$version/

使用 rm -rf 命令删除 .NET 版本。 例如,若要删除 6.0.406 SDK,请运行以下命令:

sudo rm -rf /usr/share/dotnet/sdk/6.0.406

重要

版本目录可能与要卸载的“版本”不匹配。 与单个 .NET 版本一起安装的各个运行时和 SDK 可能具有不同的版本。 例如,你可能安装了 ASP.NET Core 8 运行时,其中安装了 8.0.2 ASP.NET Core 运行时和 8.0.8. NET 运行时。 二者有不同版本的目录。 有关详细信息,请参阅 .NET 的版本控制方式概述

手动安装 .NET 时,它通常会安装到 /usr/local/share/dotnet/$HOME/.dotnet 目录中。 SDK、运行时和 .NET 主机将安装到不同的子目录中。 这些“组件”目录包含每个 .NET 版本的目录。 通过删除版本控制目录,可以从系统中删除该版本的 .NET。 这些目录可能因 macOS 版本而异。

可以使用三个命令来发现 .NET 的安装位置:dotnet --list-sdks(用于 SDK)、dotnet --list-runtimes(用于运行时)和 dotnet --info(用于所有内容)。 这些命令不会列出 .NET 主机。 若要确定安装了哪些主机,请检查 /usr/local/share/dotnet/host/fxr/ 目录。 以下列表表示特定版本的 .NET 的目录,其中 $version 变量表示 .NET 的版本:

  • SDK

    /usr/local/share/dotnet/sdk/$version/

  • 运行时

    运行时基于特定的 .NET 产品运行时,例如 Microsoft.AspNetCore.AllMicrosoft.NETCore.App(特别是 .NET 运行时)。 它们将安装到 /usr/local/share/dotnet/shared/$product/$version 目录,其中 $product 是产品运行时。 例如,你可能会看到以下目录:

    /usr/local/share/dotnet/shared/Microsoft.NETCore.App/$version/dotnet --info
    /usr/local/share/dotnet/shared/Microsoft.AspNetCore.App/$version/
    /usr/local/share/dotnet/shared/Microsoft.AspNetCore.All/$version/
    
  • .NET 主机

    /usr/local/share/dotnet/host/fxr/$version/

使用 rm -rf 命令删除 .NET 版本。 例如,若要删除 6.0.406 SDK,请运行以下命令:

sudo rm -rf /usr/local/share/dotnet/sdk/6.0.406

重要

版本目录可能与要卸载的“版本”不匹配。 与单个 .NET 版本一起安装的各个运行时和 SDK 可能具有不同的版本。 例如,你可能安装了 ASP.NET Core 8 运行时,其中安装了 8.0.2 ASP.NET Core 运行时和 8.0.8. NET 运行时。 二者有不同版本的目录。 有关详细信息,请参阅 .NET 的版本控制方式概述

重要

如果你使用的是基于 Arm 的 Mac,例如搭载了 M1 芯片的 Mac,请查看在基于 Arm 的 Mac 上安装 .NET 中描述的目录路径。

.NET 卸载工具

你可以使用 .NET 卸载工具从系统中删除 .NET SDK 和运行时。 可使用选项集合来指定应卸载的版本。 有关详细信息,请参阅 .NET 卸载工具概述

删除 NuGet 回退目录

在 .NET Core 3.0 SDK 之前,.NET Core SDK 安装程序使用名为 NuGetFallbackFolder 的目录存储 NuGet 包的缓存。 此缓存在操作期间(如 dotnet restoredotnet build /t:Restore)使用。 NuGetFallbackFolder 位于安装 .NET 的 sdk 文件夹下。 例如,它可以位于 Windows 上的 C:\Program Files\dotnet\sdk\NuGetFallbackFolder 和 macOS 上的 /usr/local/share/dotnet/sdk/NuGetFallbackFolder 处。

如果是以下情况,则可能需要删除此目录:

  • 仅使用 .NET Core 3.0 SDK 或 .NET 5(或更高版本)进行开发。
  • 你使用早于 3.0 的 .NET Core SDK 版本进行开发,但可以联机工作。

如果要删除 NuGet 回退目录,可以将其删除,但需要管理员权限才能执行此操作。

建议不要删除 dotnet 目录。 这样做会删除以前安装的所有全局工具。 此外,在 Windows 上:

  • 你将中断 Visual Studio 2019 版本 16.3 及更高版本。 可以运行“修复” 来恢复。
  • 如果“应用和功能”对话框中存在 .NET Core SDK 条目,它们将是孤立的