本文可帮助你确定如何在 Ubuntu 上安装.NET。 从 Ubuntu 22.04 开始,内置的 Ubuntu 源中提供大多数受支持的 .NET 版本。 Ubuntu .NET后移植包存储库包含其余受支持的.NET版本。
Canonical 接管了在 Ubuntu 上出版 .NET。 从 Ubuntu 22.04 开始,Microsoft不再将 Ubuntu 的.NET分发到 Microsoft 包存储库。
支持的发行版
下表列出了当前支持的.NET版本及其支持的 Ubuntu 版本。 每个链接都会转到特定的 Ubuntu 版本页,并说明如何为该版本的 Ubuntu 安装.NET。
| Ubuntu | 支持的.NET版本 | 适用于 内置 Ubuntu 源 |
适用于 .NET 向后移植 Ubuntu 源 |
适用于 Microsoft 源 |
|---|---|---|---|---|
| 26.04 (LTS) | 10.0, 9.0, 8.0 | 10.0 | 9.0, 8.0 | 没有 |
| 25.10 | 10.0, 9.0, 8.0 | 10.0, 9.0, 8.0 | 没有 | 没有 |
| 25.04 | 10.0, 9.0, 8.0 | 10.0, 9.0, 8.0 | 没有 | 没有 |
| 24.04 (LTS) | 10.0, 9.0, 8.0 | 10.0, 8.0 | 9.0, 7.0, 6.0 | 没有 |
| 22.04 (LTS) | 10.0, 9.0, 8.0 | 8.0、7.0、6.0 | 10.0、9.0 | 8.0、7.0、6.0、3.1 |
当 Ubuntu 版本达到其支持期结束时,该特定 Ubuntu 版本不再支持.NET。
Canonical 在 Ubuntu 版本生存期内在其内置 Ubuntu 源中支持 .NET 版本(即使在 Microsoft 提供的支持生存期之外),并为 .NET 向后移植包存储库中的 .NET 版本提供了最佳支持,该版本不会超出 Microsoft 提供的支持生存期。
不再支持以下版本的 .NET ❌:
- .NET 7
- .NET 6
- .NET 5
- .NET Core 3.1
- .NET Core 3.0
- .NET Core 2.2
- .NET Core 2.1
- .NET Core 2.0
升级 Ubuntu 时的注意事项
将 Ubuntu 升级到 22.04 或更高版本? 请考虑先卸载.NET。
如果使用包管理器从Microsoft包存储库安装.NET,则升级 Ubuntu 后,最终会遇到包混合问题。 现在,Canonical 将.NET发布到 Ubuntu 22.04 的包源(及更高版本),包管理器将不知道以前安装的.NET版本。 包无法升级到最新的.NET。 首先,卸载它们,然后从 Ubuntu 包存储库重新安装它们。
决定如何安装.NET
当 Ubuntu 版本通过内置或 .NET 向后移植 Ubuntu 源为 .NET 提供支持时,Canonical 将提供对这些 .NET 版本的支持,并且这些版本可能针对不同的工作负载进行优化。 Microsoft 为 Microsoft 包存储库源中的包提供支持。
警告
建议在源 .NET 包的 Ubuntu 或 Microsoft 源之间进行选择。 不要混合多个包存储库中的.NET包,因为当应用尝试解决特定版本的.NET时,这会导致问题。
| 方法 | 优点 | 缺点 |
|---|---|---|
|
包管理器 (内置 Ubuntu 源) |
|
|
|
包管理器 (.NET 向后移植 Ubuntu 源) |
|
|
|
包管理器 (Microsoft 源) |
|
|
| 脚本\手动提取 |
|
|
使用以下部分来确定应如何安装.NET:
- 我使用的是 Ubuntu 22.04 或更高版本,我只需要.NET
- 我使用的是低于 Ubuntu 22.04 的版本
-
我使用的是其他 Microsoft 包,例如
powershell、mdatp或mssql - 我想创建.NET应用
- 我想在容器、云或持续集成方案中运行.NET应用
- 我的 Ubuntu 分发不包含我想要的.NET版本,或者我需要一个已经不受支持的.NET版本
- 我需要安装预览版
- 我不需要使用 APT
- 我使用的是基于 Arm 的 CPU
- 我使用的是 IBM 系统 Z 或 Power 平台
我使用的是 Ubuntu 22.04 或更高版本,我只需要.NET
如果你不需要其他 Microsoft 包,例如 powershell、mdatp 或 mssql,请通过 Ubuntu 源安装 .NET。 有关详细信息,请参阅以下页面:
- 在 Ubuntu 26.04 上安装 .NET。
- 在 Ubuntu 25.10 上安装 .NET。
- 在Ubuntu 25.04上安装.NET。
- 在 Ubuntu 24.04 上安装 .NET.
- 在 Ubuntu 22.04 上安装 .NET。
重要
如果使用 .NET 8 SDK 和 Ubuntu 22.04,请了解 Canonical 提供的 SDK 版本始终位于 .1xx 功能带中。 如果要使用较新的功能区段版本,请使用 Microsoft 源安装 SDK。 请确保查看 Linux 上 .NET 包混乱问题 一文,以了解在不同存储库源之间切换的影响。
如果您打算安装 Microsoft 存储库以使用其他 Microsoft 包,例如 powershell、mdatp 或 mssql,则需要降低 Microsoft 存储库提供的 .NET 包的优先级。 有关如何降低这些软件包的优先级的说明,请参阅 My Linux 分发版提供了 .NET 包,我想使用它们。
我使用的是低于 Ubuntu 22.04 的版本
按照在 Ubuntu 上安装 .NET SDK 或 .NET 运行时中特定于版本的部分中的说明进行操作。
查看 Supported distributions 部分,了解有关 Ubuntu 版本支持哪些版本的.NET的详细信息。 如果要安装不支持的版本,请参阅注册 Microsoft 包存储库。
我使用的是其他 Microsoft 包,例如 powershell、mdatp 或 mssql
如果 Ubuntu 版本通过 Ubuntu 源为 .NET 提供支持,则必须决定哪个源应安装 .NET。 支持的发行版部分提供了一个表,其中列出了包源提供的 .NET 版本。
如果要从 Ubuntu 源获取 .NET 包,则需要降低 Microsoft 存储库提供的 .NET 包的优先级。 有关如何降低这些软件包的优先级的说明,请参阅 My Linux 分发版提供了 .NET 包,我想使用它们。
我想创建.NET应用
对 SDK 使用与运行时相同的包源。 建议通过 Ubuntu 源安装 .NET。 但是,如果您想从其他源安装.NET(例如,从Microsoft 包存储库以访问更高版本的 SDK 功能集),则应卸载.NET,配置您的包管理器以忽略来自 Ubuntu 源的.NET 包,并从其他源重新安装它。
查看 Decide 如何安装 .NET 部分中的其他建议。
我想在容器、云或持续集成方案中运行.NET应用
如果 Ubuntu 版本提供所需的 .NET 版本,请从 Ubuntu 源中安装该版本。 否则,注册Microsoft包存储库并从该存储库安装.NET。 请查看支持的发行版部分中的信息。
如果所需的.NET版本不可用,请尝试使用 dotnet-install 脚本。
我的 Ubuntu 发行版不包括我所需的 .NET 版本,或者我需要一个已停止支持的 .NET 版本。
建议使用 APT 和 Microsoft 包存储库。 有关详细信息,请参阅注册并安装 Microsoft 包存储库部分。
我需要安装预览版
使用以下方法之一安装.NET:
我不需要使用 APT
如果需要自动安装,请使用 Linux 安装脚本。
如果要完全控制.NET安装体验,请下载 tarball 并手动安装.NET。 有关详细信息,请参阅手动安装。
我使用的是基于 Arm 的 CPU
如果 Ubuntu 版本提供所需的 .NET 版本,请从内置源安装它。 请查看支持的发行版部分中的信息。
如果所需的.NET版本不可用,请尝试使用以下方法之一安装.NET:
我使用的是 IBM 系统 Z 或 Power 平台
从 Ubuntu 22.04 上的 .NET 8 开始,Canonical 支持 IBM System Z 和 Power 平台的 .NET。 今后,所有.NET版本都将继续获得支持。
通过内置 Ubuntu 源安装 .NET。 有关详细信息,请参阅以下页面:
注册包存储库
根据所用 Ubuntu 的版本,你可能需要注册 Ubuntu 向后移植包存储库或 Microsoft 包存储库。
重要
请确保考虑 决定如何安装 .NET 章节中的信息。
Ubuntu .NET 向后移植包存储库
Ubuntu .NET 向后移植包存储库中提供有 Ubuntu 内置源中未提供的 .NET 版本。 Canonical 维护此包存储库中包含的包,并提供最佳支持,这不会超出 Microsoft 提供的支持生存期或特定 Ubuntu 版本的支持期。
此包存储库在 Ubuntu 26.04 LTS(Resolute Raccoon)、Ubuntu 24.04 LTS(Noble Numbat)和 Ubuntu 22.04 LTS(Jammy Jellyfish)上受支持。 支持的发行版部分提供了一个表,其中列出了包源提供的 .NET 版本。 有关详细信息,请参阅 Ubuntu .NET backports 包存储库。
要添加此包存储库,请运行以下命令:
sudo add-apt-repository ppa:dotnet/backports
sudo apt update
注册 Ubuntu .NET backports 包存储库
打开终端并运行以下命令:
sudo add-apt-repository ppa:dotnet/backports
注释
Ubuntu .NET 向后移植包存储库与内置的 Ubuntu 源兼容。 因此,无需将包管理器配置为忽略内置 Ubuntu 源中的.NET包。
注销 Ubuntu .NET反向移植包存储库
如果不想再使用 Ubuntu .NET回港包存储库中的包,可以注销它。 打开终端并运行以下命令:
sudo add-apt-repository --remove ppa:dotnet/backports
重要
注销 Ubuntu .NET 后端移植包软件源不会卸载任何包。
找不到 add-apt-repository 命令
add-apt-repository(1) 实用工具预安装在大多数 Ubuntu 安装上。
如果收到一条错误消息,指出找不到 add-apt-repository 命令,则必须安装提供此命令的 software-properties-common 包。 打开终端并运行以下命令:
sudo apt update
sudo apt install software-properties-common
注册 Microsoft 包存储库
重要
这仅适用于 24.04 之前的 Ubuntu 版本。 从 Ubuntu 24.04 开始,Microsoft 不再将包发布到 Microsoft 包存储库。 使用 受支持的发行版本表 来确定安装 .NET 的最佳方法。
Microsoft 包存储库包含以前或当前受 Ubuntu 版本支持的所有 .NET 版本。 如果 Ubuntu 版本提供 .NET 包,则需要降低 Ubuntu 包的优先级并使用 Microsoft 存储库。 有关如何降低包优先级的说明,请参阅我需要 Linux 发行版未提供的 .NET 版本。
重要
Microsoft包存储库仅支持面向 x64 体系结构的.NET包。 其他体系结构(如 Arm)必须通过某种其他方式安装.NET,例如使用 installer 脚本或通过 manual 安装。
预览版在 Microsoft 包存储库中不可用。 有关详细信息,请参阅安装预览版本。
谨慎
建议仅使用一个存储库来管理所有.NET安装。 如果以前使用 Ubuntu 存储库安装了 .NET,则必须清理 .NET 包的系统,并将 APT 配置为忽略 Ubuntu 源。 有关如何执行此作的详细信息,请参阅 我需要 Linux 分发版未提供的 .NET版本。
使用 APT 进行安装可通过几个命令来完成。 在安装.NET之前,请运行以下命令,将Microsoft包签名密钥添加到受信任的密钥列表中,并添加包存储库。
打开终端并运行以下命令:
# Get OS version info which adds the $ID and $VERSION_ID variables
source /etc/os-release
# Download Microsoft signing key and repository
wget https://packages.microsoft.com/config/$ID/$VERSION_ID/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
# Install Microsoft signing key and repository
sudo dpkg -i packages-microsoft-prod.deb
# Clean up
rm packages-microsoft-prod.deb
# Update packages
sudo apt update
小提示
以前的脚本是为 Ubuntu 编写的,如果你使用派生的发行版(例如 Linux Mint),则可能无法运行。 很可能没有给 $ID 和 $VERSION_ID 变量分配正确的值,从而导致 wget 命令的 URI 无效。
$ID 对应于分发版(例如,ubuntu),而 $VERSION_ID 则映射到要获取其软件包的特定 Ubuntu 版本,例如 22.04 或 23.10。
例如,在 Ubuntu 22.04 上,$ID 将是 ubuntu,$VERSION_ID 将是 22.04。 URL 将如下所示:https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb。
可以使用 Web 浏览器并导航到 https://packages.microsoft.com/config/ubuntu/,查看哪些版本的 Ubuntu 可用作 $repo_version 值。
安装、卸载或更新.NET
以下部分介绍如何通过包管理器管理.NET。
安装.NET
使用 sudo apt install <package-name> 命令通过包管理器安装.NET。 将 <package-name> 替换为要安装的.NET包的名称。 例如,若要安装 .NET SDK 10.0,请使用命令 sudo apt install dotnet-sdk-10.0。 下表列出了当前支持的 .NET 软件包(可能会因 Ubuntu 版本而有所不同):
| 产品 | 类型 | 程序包 | |
|---|---|---|---|
| 10.0 | ASP.NET Core | 运行时 | aspnetcore-runtime-10.0 |
| 10.0 | .NET | 运行时 | dotnet-runtime-10.0 |
| 10.0 | .NET | SDK | dotnet-sdk-10.0 |
| 9.0 | ASP.NET Core | 运行时 | aspnetcore-runtime-9.0 |
| 9.0 | .NET | 运行时 | dotnet-runtime-9.0 |
| 9.0 | .NET | SDK | dotnet-sdk-9.0 |
| 8.0 | ASP.NET Core | 运行时 | aspnetcore-runtime-8.0 |
| 8.0 | .NET | 运行时 | dotnet-runtime-8.0 |
| 8.0 | .NET | SDK | dotnet-sdk-8.0 |
小提示
如果未创建.NET应用,请安装 ASP.NET Core运行时,因为它包括.NET运行时,还支持 ASP.NET Core应用。
某些环境变量会影响安装后.NET的运行方式。 有关详细信息,请参阅 .NET SDK 和 CLI 环境变量。
卸载.NET
如果通过包管理器安装.NET,请使用 apt-get remove 命令以相同方式卸载:
sudo apt-get remove dotnet-sdk-6.0
有关详细信息,请参阅 Uninstall .NET。
更新.NET
如果通过包管理器安装.NET,则可以使用 apt upgrade 命令升级包。 例如,以下命令升级最新版本的 dotnet-sdk-10.0 包:
sudo apt update
sudo apt upgrade dotnet-sdk-10.0
小提示
如果在安装.NET后升级了 Linux 分发版,则可能需要重新配置Microsoft包存储库。 运行当前发行版本的安装说明,以将包存储库升级到适用于.NET更新的版本。
管理预览版本
以下部分介绍如何安装和卸载.NET预览版。
安装预览版本
.NET的预览版和候选版本在包存储库中不可用。 可以通过以下方式之一安装 .NET 的预览版和发布候选版:
删除预览版本
使用包管理器管理.NET的安装时,如果以前安装了预览版,可能会遇到冲突。 包管理器可将非预览版解释为早期版本的.NET。 若要安装非预览版本,需要首先卸载预览版本。 有关卸载.NET的详细信息,请参阅如何删除.NET运行时和 SDK。
故障排除
从 Ubuntu 22.04 开始,可能会遇到似乎只有一部分 .NET 可用的情况。 例如,已安装运行时和 SDK,但在运行 dotnet --info 时仅列出运行时。 此解决方案可与使用两个不同的包源有关。 内置的 Ubuntu 22.04 和 Ubuntu 22.10 包源包括一些版本的 .NET,但并非所有版本,你也可能还从 Microsoft 源安装了 .NET。 有关如何解决此问题的更多信息,请参阅排查与 Linux 上缺失文件相关的 .NET 错误。
APT 问题
本部分提供有关使用 APT 安装.NET时可能遇到的常见错误的信息。
找不到包
重要
使用包管理器从 Microsoft 包源 安装 .NET 仅支持 x64 架构。 Microsoft包源不支持其他体系结构(如 Arm64)。 使用 Ubuntu 源或手动安装 .NET。 使用多个源时,请谨慎对待包混合问题。 有关详细信息,请参阅 Linux 上的 .NET 包问题混淆。
有关安装 .NET without a package manager 的详细信息,请参阅以下文章之一:
找不到\无法安装某些包
注释
仅当从Microsoft包源安装.NET时,此信息才适用。
如果收到类似于“找不到包 {dotnet-package}”或“无法安装某些包”的错误消息,请运行以下命令。
以下命令组中有两个占位符。
{dotnet-package}
这表示要安装的.NET包,例如aspnetcore-runtime-8.0。 它在以下sudo apt-get install命令中使用。
首先,尝试清除包列表:
sudo dpkg --purge packages-microsoft-prod && sudo dpkg -i packages-microsoft-prod.deb
sudo apt-get update
然后,再次尝试安装.NET。 如果这不起作用,可使用以下命令运行手动安装:
如果使用的是 Ubuntu 23.10 或更高版本,请尝试以下命令:
# Get OS version info which adds the $ID and $VERSION_ID variables
source /etc/os-release
# Download the Microsoft keys
sudo apt-get install -y gpg wget
wget https://packages.microsoft.com/keys/microsoft.asc
cat microsoft.asc | gpg --dearmor -o microsoft.asc.gpg
# Add the Microsoft repository to the system's sources list
wget https://packages.microsoft.com/config/$ID/$VERSION_ID/prod.list
sudo mv prod.list /etc/apt/sources.list.d/microsoft-prod.list
# Move the key to the appropriate place
sudo mv microsoft.asc.gpg $(cat /etc/apt/sources.list.d/microsoft-prod.list | grep -oP "(?<=signed-by=).*(?=\])")
# Update packages and install .NET
sudo apt-get update && \
sudo apt-get install -y {dotnet-package}
注释
如果使用派生分发版(如 Linux Mint),则来自 $ID 的 $VERSION_ID 和 /etc/os-release 变量可能与 Microsoft 包服务器上的任何目录不匹配,从而导致 404 错误。 若要解决此错误,请检查分发基于哪个 Ubuntu 或 Debian 版本并改用这些值。 例如,Linux Mint 22 基于 Ubuntu 24.04,因此请使用ubuntu替换$ID,并使用24.04替换$VERSION_ID。
如果使用的是 23.10 之前的 Ubuntu 版本,请尝试以下命令:
# Define the OS version, name, and codename
source /etc/os-release
# Download the Microsoft keys
sudo apt-get install -y gpg wget
wget https://packages.microsoft.com/keys/microsoft.asc
cat microsoft.asc | gpg --dearmor -o microsoft.asc.gpg
sudo mv microsoft.asc.gpg /etc/apt/trusted.gpg.d/
# Add the Microsoft repository to the system's sources list
wget https://packages.microsoft.com/config/$ID/$VERSION_ID/prod.list
sudo mv prod.list /etc/apt/sources.list.d/microsoft-prod.list
# Set ownership
sudo chown root:root /etc/apt/trusted.gpg.d/microsoft.asc.gpg
sudo chown root:root /etc/apt/sources.list.d/microsoft-prod.list
# Update packages and install .NET
sudo apt-get update && \
sudo apt-get install -y {dotnet-package}
注释
如果使用派生分发版(如 Linux Mint),则来自 $ID 的 $VERSION_ID 和 /etc/os-release 变量可能与 Microsoft 包服务器上的任何目录不匹配,从而导致 404 错误。 若要解决此错误,请检查分发基于哪个 Ubuntu 或 Debian 版本并改用这些值。 例如,Linux Mint 22 基于 Ubuntu 24.04,因此请用ubuntu替换$ID,用24.04替换$VERSION_ID。
未能提取
安装.NET包时,可能会看到类似于 Failed to fetch ... File has unexpected size ... Mirror sync in progress? 的错误。 此错误可能意味着.NET的包存储库正在使用较新版本的包进行升级,请稍后重试。 升级期间,包源的不可用时间不应超过 30 分钟。 如果持续收到此错误超过 30 分钟,请在 https://github.com/dotnet/core/issues 中提交问题。
依赖
使用包管理器进行安装时,将为你安装这些库。 但是,如果手动安装.NET或发布自包含应用,则必须安装这些依赖项才能运行应用:
- ca-certificates
- libc6
- libgcc1(适用于 16.x 和 18.x)
- libgcc-s1(适用于 20.x 或更高版本)
- libgssapi-krb5-2
- libicu55(针对 16.x)
- libicu60(针对 18.x)
- libicu66(适用于 20. x)
- libicu70(适用于 22.04)
- libicu72(适用于 23.10)
- libicu74 (适用于 24.04)
- libicu76 (对于 25.04 和 25.10)
- libicu78 (适用于 26.04 或更高版本)
- libssl1.0.0(适用于 16.x)
- libssl1.1(适用于18.x、20.x)
- libssl3(适用于 22.x 或更高版本)
- libstdc++6
- tzdata
- zlib1g
可以使用 apt install 命令安装依赖项。 以下代码片段演示了如何安装 zlib1g 库:
sudo apt install zlib1g
后续步骤
- .NET CLI 概述
- 如何为 .NET CLI 启用 Tab 补全功能
Tutorial:使用 .NET