通过 Snap 安装 .NET SDK
本文介绍了如何安装 .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 版本包括:
- 8.0 (LTS),支持将于 2026 年 11 月 10 日结束。
- 6.0 (LTS),支持将于 2024 年 11 月 12 日结束。
生成和发布 .NET 的其他实体可能会引入不同的支持策略。 务必向他们了解 .NET 的支持方式。
1.安装 SDK
适用于 .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 包通道 |
---|---|
8 (LTS) | 8.0/stable latest/stable lts/stable |
7 | 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 |