先运行 uname -m 和 cat /etc/os-release 确认系统架构(x86_64/aarch64)和发行版版本(ID/VERSION_ID),再对照微软支持列表选择匹配的安装方式;官方推荐包管理器安装以确保 PATH、依赖和升级链路正确;国内用户需配置 NuGet 国内源(如清华镜像)解决 restore 超时;SDK 与 runtime 版本前两位必须一致,避免运行时报 framework not found;禁用混合安装(如 snap + apt)导致的路径污染。

怎么确认系统架构和源是否匹配
装不上 dotnet 最常见的原因是下错了包——比如在 aarch64(ARM64)机器上硬装 x64 的 DEB/RPM,或者用 Ubuntu 22.04 的源去装 24.04 的系统。先跑两行命令看清楚底子:
-
uname -m看是x86_64还是aarch64 -
cat /etc/os-release确认发行版和版本号,重点看ID和VERSION_ID
微软官方只对主流发行版提供直接支持:Ubuntu(20.04+)、Debian(11+)、CentOS/RHEL 7–9、Fedora(37+)。Arch 或 Alpine 得走 SDK 源码编译或第三方镜像,别硬套官方文档。
用包管理器安装 dotnet-sdk 的正确姿势
官方推荐用包管理器装,不是因为“方便”,而是因为能自动处理 dotnet 命令的 PATH 注册、依赖库(如 libicu、libssl)版本对齐,以及后续升级链路。手动解压 tar.gz 容易漏掉这些。
- Ubuntu/Debian:
sudo apt update && sudo apt install -y apt-transport-https && wget https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/packages-microsoft-prod.deb -O packages-microsoft-prod.deb && sudo dpkg -i packages-microsoft-prod.deb && sudo apt update && sudo apt install -y dotnet-sdk-8.0 - RHEL/CentOS 8+:
sudo dnf install -y dotnet-sdk-8.0(前提是已配置好microsoft-rhel8repo) - 别用
curl | bash一键脚本——它不校验 GPG key,也不适配非标准路径,CI 环境里容易挂
装完立刻验证:dotnet --list-sdks 应该输出类似 8.0.400 [/usr/share/dotnet/sdk];如果报 command not found,大概率是 shell 配置没生效,新开个终端或执行 source /etc/profile。
dotnet restore 总卡住或超时怎么办
这不是网络差的问题,而是默认 NuGet 源走的是微软全球 CDN,在国内直连经常 DNS 污染或 TLS 握手失败。改源比换代理更稳、更可复现。
- 全局改(影响所有项目):
dotnet nuget add source https://api.nuget.org/v3/index.json -n official改成国内镜像,例如清华源:dotnet nuget add source https://nuget.mirrors.tuna.tsinghua.edu.cn/v3/index.json -n tuna --username unused --password unused - 项目级改:在项目根目录建
NuGet.Config,内容写死源地址,CI 构建时不会受环境干扰 - 别在
.csproj里硬编码<packagesource></packagesource>—— 这是 MSBuild 层面的 hack,dotnet restore不认
顺带一提:dotnet restore 默认不开并发,小项目无所谓,但 CI 上跑几十个 .csproj 时,加 --disable-parallel 反而更稳,避免文件锁冲突。
运行时(runtime)和 SDK 装错版本的典型症状
dotnet build 成功但 dotnet run 报 The framework 'Microsoft.NETCore.App', version '8.0.0' was not found,说明 SDK 装了,但 runtime 没装全,或者版本不匹配。
- SDK 包含 runtime,但只含对应主版本的最新 patch 版(比如
dotnet-sdk-8.0自带8.0.4runtime),如果你的.csproj里写了<TargetFramework>net8.0</TargetFramework>,它就只认8.0.x,不认8.1.0(那是预览版) - 生产环境部署建议只装
dotnet-runtime-8.0(不含 SDK),体积小、攻击面小;开发机才需要 SDK - 查已装 runtime:
dotnet --list-runtimes;查已装 SDK:dotnet --list-sdks;两者版本号前两位必须一致,否则运行时找不到
最麻烦的是混合安装:比如用 snap 装过旧版,又用 apt 装新版,which dotnet 可能指向 /snap/bin/dotnet,但 dotnet --version 显示的却是 apt 装的路径下的版本——这种路径污染得手动删掉 snap 版本再重装。










