通过 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 的特定于发行版的说明。

  1. 打开终端。

  2. 使用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。

dotnetSnap 别名自动创建并映射到 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。

  1. 在你选择的文本编辑器中打开 /etc/wsl.conf

  2. 粘贴以下配置:

    [boot]
    systemd=true
    
  3. 保存文件并通过 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'

尝试执行以下步骤来解决此问题:

  1. 确保永久导出DOTNET_ROOT环境变量

  2. 尝试将 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