本文介绍了如何安装 .NET SDK Snap 包。 .NET SDK snap 包由 Canonical 提供和维护。 对于内置于 Linux 发行版的包管理器而言,Snap 是一种很好的替代方法。
Snap 是应用及其依赖项的捆绑包,可在多个不同的 Linux 发行版中正常运行。 可以从 Snap Store 中发现和安装 Snap。 有关 Snap 的更多信息,请参阅快速入门教程。
注意
.NET 的 Snap 安装可能会遇到运行 .NET 工具的问题。 如果要使用 .NET 工具,建议使用 dotnet-install
脚本或特定 Linux 发行版的包管理器来安装 .NET。
当通过 Snap 安装 .NET 时,dotnet watch
命令不起作用是一个已知问题。
如果要使用 .NET 工具或 dotnet watch
命令,建议使用 dotnet-install
脚本安装 .NET。
先决条件
- 支持 Snap 的 Linux 发行版。
snapd
Snap 守护程序。
你的 Linux 发行版可能已经包含 Snap。 尝试在终端中运行 snap
以查看命令能否工作。 有关支持 Snap 的 Linux 发行版列表以及有关如何安装 Snap 的说明,参见安装snapd
部分。
.NET 版本
Microsoft 以两种不同的支持策略 (LTS) 和标准期限支持 (STS) 发布 .NET。 所有版本的质量都是一样的。 唯一的区别是支持的时间长短。 LTS 版本可获得为期三年的免费支持和补丁。 STS 版本可获得 18 个月的免费支持和修补程序。 有关详细信息,请参阅 .NET 支持策略。
Microsoft 目前支持的 .NET 版本包括:
- 9.0 (STS)- 支持将于 2026 年 5 月结束。
- 8.0 (LTS),支持将于 2026 年 11 月 10 日结束。
生成和发布 .NET 的其他实体可能会引入不同的支持策略。 务必向他们了解 .NET 的支持方式。
1.安装 SDK
重要
.NET 9 于 2024 年 11 月 12 日发布。 包管理器源或特定 Linux 分发版可能需要一段时间才能将其包含在包管理器源中。
适用于 .NET SDK 的 Snap 包都是在同一标识符(即 dotnet-sdk
)下发布的。 可以通过指定通道来安装特定版本的 SDK。 SDK 包括 ASP.NET Core 和 .NET 运行时,版本控制为 SDK。
提示
Snapcraft .NET SDK 包页包括有关如何安装 Snapcraft 和 .NET 的特定于发行版的说明。
打开终端。
使用
snap install
安装 .NET SDK Snap 包。 例如,以下命令默认安装latest/stable
通道。sudo snap install dotnet-sdk --classic
--classic
参数是必需的。- 使用
--channel
参数指定要安装的版本。 如果省略此参数,则使用latest/stable
。 例如,--channel 8.0/stable
安装 .NET SDK 8.0。
dotnet
Snap 别名自动创建并映射到 Snap 包的dotnet
命令。
下表列出了可以安装的包通道:
.NET 版本 | Snap 包通道 |
---|---|
9 (STS) | *尚不可用 |
8 (LTS) | 8.0/stable lts/stable |
7 (STS) | 7.0/stable (停止支持) |
6 (LTS) | 6.0/stable (停止支持) |
5 | 5.0/stable (停止支持) |
3.1 | 3.1/stable (停止支持) |
2.1 | 2.1/stable (停止支持) |
2.导出安装位置
DOTNET_ROOT
环境变量经常被工具用来确定 .NET 的安装位置。 通过 Snap 安装 .NET 时,不配置此环境变量。 应在配置文件中配置 DOTNET_ROOT 环境变量。 Snap 的路径采用以下格式:/snap/{package}/current
。
export DOTNET_ROOT=/snap/dotnet-sdk/current
永久导出环境变量
前面的 export
命令只为运行它的终端会话设置环境变量。
你可以编辑 shell 配置文件,永久地添加这些命令。 Linux 提供了许多不同的 shell,每个都有不同的配置文件。 例如:
- Bash Shell:~/.bash_profile、~/.bashrc
- Korn Shell:~/.kshrc 或 .profile
- Z Shell: _~/.zshrc* 或.zprofile
为 shell 编辑相应的源文件并添加 export DOTNET_ROOT=/snap/dotnet-sdk/current
。
3.使用 .NET CLI
打开终端并键入 dotnet
。
dotnet
显示以下输出:
Usage: dotnet [options]
Usage: dotnet [path-to-application]
Options:
-h|--help Display help.
--info Display .NET information.
--list-sdks Display the installed SDKs.
--list-runtimes Display the installed runtimes.
path-to-application:
The path to an application .dll file to execute.
要了解如何使用 .NET CLI,请参阅 .NET CLI 概述。
故障排除
dotnet 终端命令不起作用
Snap 包可以将别名映射到该包提供的命令。 默认情况下,.NET SDK Snap 包为dotnet
命令创建别名。 如果未创建或之前删除了别名,以下命令演示了如何映射别名:
sudo snap alias dotnet-sdk.dotnet dotnet
无法在 WSL2 上安装 Snap
必须先在 WSL2 实例上启用 systemd
,然后才能安装 Snap。
在你选择的文本编辑器中打开
/etc/wsl.conf
。粘贴以下配置:
[boot] systemd=true
保存文件并通过 PowerShell 重启 WSL2 实例。 使用
wsl.exe --shutdown
命令。
无法解析 dotnet 命令或 SDK
其他应用(例如 Visual Studio Code 中的代码 IDE 或扩展)通常会尝试解析 .NET SDK 的位置。 通常,通过检查DOTNET_ROOT
环境变量或找出dotnet
可执行文件所在的位置来完成发现。 Snap 安装的 .NET SDK 可能会混淆这些应用。 当这些应用无法解析 .NET SDK 时,会显示类似于以下消息之一的错误:
- 找不到指定的 SDK 'Microsoft.NET.Sdk'
- 找不到指定的 SDK 'Microsoft.NET.Sdk.Web'
- 找不到指定的 SDK 'Microsoft.NET.Sdk.Razor'
尝试执行以下步骤来解决此问题:
尝试将 Snap 可执行文件
dotnet
符号链接到程序正在查找的位置。dotnet
命令要查找的两个常见路径是:/usr/local/bin/dotnet
/usr/share/dotnet
使用以下命令创建 Snap 包的符号链接:
ln -s /snap/dotnet-sdk/current/dotnet /usr/local/bin/dotnet
TLS/SSL 证书错误
通过 Snap 安装 .NET 后,可能会在某些发行版上找不到 .NET TLS/SSL 证书,并且可能会在restore
期间看到以下错误:
Processing post-creation actions...
Running 'dotnet restore' on /home/myhome/test/test.csproj...
Restoring packages for /home/myhome/test/test.csproj...
/snap/dotnet-sdk/27/sdk/2.2.103/NuGet.targets(114,5): error : Unable to load the service index for source https://api.nuget.org/v3/index.json. [/home/myhome/test/test.csproj]
/snap/dotnet-sdk/27/sdk/2.2.103/NuGet.targets(114,5): error : The SSL connection could not be established, see inner exception. [/home/myhome/test/test.csproj]
/snap/dotnet-sdk/27/sdk/2.2.103/NuGet.targets(114,5): error : The remote certificate is invalid according to the validation procedure. [/home/myhome/test/test.csproj]
若要解决此问题,请设置一些环境变量:
export SSL_CERT_FILE=[path-to-certificate-file]
export SSL_CERT_DIR=/dev/null
证书位置因发行版而异。 下面是我们在发行版中观察到该问题的位置:
分发 | 位置 |
---|---|
Fedora | /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem |
OpenSUSE | /etc/ssl/ca-bundle.pem |
Solus | /etc/ssl/certs/ca-certificates.crt |