必须明确安装dotnet-sdk(开发用)或dotnet-runtime(仅运行),ubuntu/debian需添加微软官方apt源安装dotnet-sdk-8.0,rhel/centos需手动加源并处理gpg和selinux问题,装完须用dotnet --list-sdks验证。

装错包就跑不起来——Linux 上不是装个 “.NET 环境” 就完事,必须明确你要的是 dotnet-sdk(开发用)还是 dotnet-runtime(仅运行),否则 dotnet myapp.dll 会直接报 Could not execute because the application was not found,或者 dotnet run 提示 The SDK 'Microsoft.NET.Sdk' specified could not be found。
Ubuntu/Debian 怎么装 dotnet-sdk-8.0(推荐开发用)
别用系统默认源,apt install dotnet-sdk-8.0 在 Ubuntu 22.04/24.04 默认源里根本不存在。必须加微软官方 APT 源:
- 执行
sudo apt update && sudo apt install -y curl gnupg - 用
$(lsb_release -rs)动态取主版本号(比如24.04),别手敲成24.10或noble;命令是:curl -fsSL 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,否则新源不生效 - 装完执行
dotnet --list-sdks,确认输出里有8.0.x;如果只看到6.0.x,八成是源没刷上或缓存没清
CentOS/RHEL Stream 怎么避免 gpg 和 selinux 报错
RHEL 8/9 或 CentOS Stream 9+ 官方 repo 只提供旧版(如 6.0),要装 8.0 必须手动加源,且容易卡在签名验证或权限拒绝:
- 先导入微软 GPG 密钥:
sudo rpm -Uvh https://packages.microsoft.com/keys/microsoft.asc - 再装源包:
sudo rpm -Uvh https://packages.microsoft.com/config/rhel/9/packages-microsoft-prod.rpm(注意版本号要和系统一致,RHEL 8 就用/rhel/8/) - 如果
dnf install dotnet-sdk-8.0提示Failed to set context on /usr/share/dotnet,关 SELinux 临时测试:sudo setenforce 0;生产环境需配策略,不是简单关掉 - 装完检查
dotnet --list-runtimes,确认有Microsoft.NETCore.App 8.0.x,否则 runtime 缺失会导致 self-contained 外的应用启动失败
只部署 dll 怎么选 runtime 包
如果你只是上线别人编译好的 MyApp.dll,不需要 SDK,但 runtime 版本必须严格匹配编译时目标框架:
- 查项目
.csproj里的<targetframework>net8.0</targetframework>,就装dotnet-runtime-8.0;如果是net6.0,就得装dotnet-runtime-6.0,混用必报错 - ASP.NET Core 应用必须装
aspnetcore-runtime-8.0,它包含dotnet-runtime-8.0+ ASP.NET 特有组件;只装基础 runtime 会提示Could not load file or assembly 'Microsoft.AspNetCore.Mvc.Core' - 自包含发布(
--self-contained true)的程序完全不用装任何 .NET 包,直接./myapp运行,但体积大、更新麻烦
dotnet --version 显示不对怎么办
dotnet --version 默认显示最高已安装 SDK 版本,不代表所有项目都能用——项目根目录下的 global.json 会强制锁定版本,容易被忽略:
- 执行
dotnet --list-sdks看实际装了哪些,比如输出含6.0.422和8.0.121 - 如果项目里有
global.json,内容是"version": "6.0.422",那即使装了 8.0,dotnet build也会用 6.0;删掉或改版本号才能切过去 - 多版本共存没问题,但别同时装
dotnet-sdk-6.0和dotnet-sdk-8.0还不清理旧包,apt autoremove建议定期跑一次,避免冲突
最常被跳过的一步:装完 runtime 或 SDK 后没验证 dotnet --list-runtimes 或 --list-sdks,而是直接跑应用——结果报错才回头查,其实两秒就能避开。











