如何删除 .NET 运行时和 SDK

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

是否应删除某个版本?

借助 .NET 版本选择行为和 .NET 各个更新之间的运行时兼容性,可安全地删除以前的版本。 .NET 运行时更新在主版本区段(如 7.x 和 6.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 版本 。

使用“添加/删除程序”来删除 .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、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 卸载工具 (dotnet-core-uninstall) 从系统中删除 .NET SDK 和运行时。 可使用选项集合来指定应卸载的版本。

注意

目前,.NET 卸载工具不支持 .NET 8+。 有关该工具的发布计划的详细信息,请参阅 GitHub - dotnet-uninstall-tool 路线图

.NET SDK 版本的 Visual Studio 依赖项

在 Visual Studio 2019 版本 16.3 之前,Visual Studio 安装程序称为独立的用于 .NET Core version 2.1 或 2.2 的 SDK 安装程序。 因此,SDK 版本显示在 Windows“应用和功能”对话框中。 使用独立安装程序删除 Visual Studio 安装的 .NET SDK 可能会破坏 Visual Studio。 如果 Visual Studio 在卸载 SDK 之后出现问题,请在该特定版本的 Visual Studio 上运行修复。 下表显示了 .NET Core SDK 版本的一些 Visual Studio 依赖项:

Visual Studio 版本 .NET Core SDK 版本
Visual Studio 2019 版本 16.2 .NET Core SDK 2.2.4xx、2.1.8xx
Visual Studio 2019 版本 16.1 .NET Core SDK 2.2.3xx、2.1.7xx
Visual Studio 2019 版本 16.0 .NET Core SDK 2.2.2xx、2.1.6xx
Visual Studio 2017 版本 15.9 .NET Core SDK 2.2.1xx、2.1.5xx
Visual Studio 2017 版本 15.8 .NET Core SDK 2.1.4xx

从 Visual Studio 2019 16.3 版开始,Visual Studio 负责其自己的 .NET SDK 副本。 因此,“应用和功能”对话框中将不再显示这些 SDK 版本

删除 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 条目,它们将是孤立的