使用 Snap 包安装 .NET SDK 或 .NET Runtime。 对于内置于 Linux 发行版的包管理器而言,Snap 是一种很好的替代方法。 本文介绍如何通过
Snap
安装 .NET。
Snap 是应用及其依赖项的捆绑包,无需修改即可在多个不同的 Linux 发行版中正常运行。 可以从 Snap Store 中发现和安装 Snap。 若要详细了解 Snap,请参阅
开始使用 Snap
。
Windows 上的 WSL2 不支持 Snap 包。 作为替代方法,可使用
dotnet-install
脚本
或特定 WSL2 发行版的包管理器。 虽然可以尝试使用
Snapcraft 论坛中的替代方法
启用 Snap,但该方法不受支持,因此不建议这样做。
.NET 的 Snap 安装可能会遇到运行
.NET 工具
的问题。 如果要使用 .NET 工具,建议使用
dotnet-install
脚本
或特定 Linux 发行版的包管理器来安装 .NET。
当通过 Snap 安装 .NET 时,
dotnet watch
命令不起作用是一个已知问题。
如果要使用 .NET 工具或
dotnet watch
命令,建议使用
dotnet-install
脚本
安装 .NET。
.NET 版本
有两种类型的受支持版本:长期支持 (LTS) 版本或标准期限支持 (STS) 。 所有版本的质量都是一样的。 唯一的区别是支持的长度。 LTS 版本可获得 3 年的免费支持和修补程序。 STS 版本获得 18 个月的免费支持和修补程序。 有关详细信息,请参阅
.NET 支持策略
。
下表列出了每个版本的 .NET (和 .NET Core) 的支持状态:
✔️ 受支持
❌ 不受支持
SDK 或 Runtime
如果要开发 .NET 应用,请安装 SDK(包括运行时)。 或者,如果只需运行应用程序,请安装运行时。 如果要安装该运行时,建议安装 ASP.NET Core 运行时,因为它同时包括 .NET 和 ASP.NET Core 运行时。
使用
dotnet --list-sdks
和
dotnet --list-runtimes
命令查看安装的版本。 有关详细信息,请参阅
如何检查是否已安装 .NET
。
安装 SDK
适用于 .NET SDK 的 Snap 包都是在同一标识符(即
dotnet-sdk
)下发布的。 可以通过指定通道来安装特定版本的 SDK。 SDK 包括相应的运行时。 下表列出了通道:
.NET 版本
Snap 包或通道
若要安装适用于 .NET SDK 的 Snap 包,请运行
snap install
命令。 使用
--channel
参数来指明要安装哪个版本。 如果省略此参数,则使用
latest/stable
。 在下面的示例中,指定的是
7.0
:
sudo snap install dotnet-sdk --classic --channel=7.0
接下来,使用 snap alias
命令为系统注册 dotnet
命令:
sudo snap alias dotnet-sdk.dotnet dotnet
此命令的格式为 sudo snap alias {package}.{command} {alias}
。 可以选择所需的任何 {alias}
名称。 例如,可以根据 Snap 安装的特定版本来命名此命令:sudo snap alias dotnet-sdk.dotnet dotnet70
。 运行命令 dotnet70
时,将调用这一特定版本的 .NET。 但选择其他别名与大多数教程和示例不兼容,因为它们需要使用 dotnet
命令。
安装运行时
适用于 .NET Runtime 的 Snap 包都是在各自的包标识符下发布的。 下表列出了这些包标识符:
.NET 版本
Snap 包
若要安装适用于 .NET Runtime 的 Snap 包,请运行 snap install
命令。 在此示例中,已安装 .NET 7:
sudo snap install dotnet-runtime-70 --classic
接下来,使用 snap alias
命令为系统注册 dotnet
命令:
sudo snap alias dotnet-runtime-70.dotnet dotnet
此命令的格式为 sudo snap alias {package}.{command} {alias}
。 可以选择所需的任何 {alias}
名称。 例如,可以根据 Snap 安装的特定版本来命名此命令:sudo snap alias dotnet-runtime-70.dotnet dotnet70
。 运行命令 dotnet70
时,将调用特定版本的 .NET。 但选择其他别名与大多数教程和示例不兼容,因为它们需要使用 dotnet
命令。
导出安装位置
DOTNET_ROOT
环境变量经常被工具用来确定 .NET 的安装位置。 通过 Snap 安装 .NET 时,不配置此环境变量。 应在配置文件中配置 DOTNET_ROOT 环境变量。 Snap 的路径采用以下格式:/snap/{package}/current
。 例如,如果你安装了 dotnet-sdk
Snap,则使用以下命令将环境变量设置为 .NET 所在的位置:
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
。
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
证书位置因发行版而异。 下面是我们在发行版中遇到此问题的位置。
解析 dotnet 时的问题
其他应用(例如适用于 Visual Studio Code 的 OmniSharp 扩展)通常会尝试解析 .NET SDK 的位置。 一般情况下,这是通过确定可执行文件 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
。 例如,若要链接当前的 .NET SDK Snap 包,请使用以下命令:
ln -s /snap/dotnet-sdk/current/dotnet /usr/local/bin/dotnet
还可以查看这些 GitHub 问题,了解有关这些问题的信息:
SDK 解析程序不能与 Linux 上的 SDK Snap 安装一起运行
找不到任何已安装的 .NET SDK
dotnet 别名
如果为 Snap 安装的 .NET 创建了别名 dotnet
,则可能会发生冲突。 使用 snap unalias dotnet
命令将其删除,然后根据需要添加其他别名。
如何为 .NET CLI 启用 Tab 自动补全
教程:使用 Visual Studio Code 通过 .NET SDK 创建控制台应用程序