Ubuntu 26.04 LTS “Resolute Raccoon” 今天正式发布。按照惯例,每个新的 Ubuntu LTS 都会附带最新的 .NET LTS,这次是 .NET 10。只需两行命令就能装好:
sudo apt update
sudo apt install dotnet-sdk-10.0
.NET 是 Ubuntu 官方支持的工具链之一,Microsoft 与 Canonical 持续合作,确保 .NET 在 Ubuntu 上稳定运行。dotnet/runtime 团队从 2025 年初起就在 CI 中测试 Debian 13 和 Ubuntu 24.10,至 2025 年底已将 26.04 纳入每个 PR 的验证流程,真正实现发布当天即开箱可用。
安装 .NET 10
在 ubuntu:resolute 容器中安装 .NET 10 SDK:
$ docker run --rm -it ubuntu:resolute
$ apt update
$ apt install -y dotnet-sdk-10.0
$ dotnet --version
10.0.105
装好后可直接运行一段 C# 代码。下面利用 .NET 10 的 file‑based app 与 heredoc,将代码通过标准输入传给 dotnet run:
$ dotnet run - << 'EOF'
using System.Runtime.InteropServices;
Console.WriteLine($"Hello {RuntimeInformation.OSDescription} from .NET {RuntimeInformation.FrameworkDescription}");
EOF
Hello Ubuntu Resolute Raccoon (development branch) from .NET .NET 10.0.5
这种 Unix 管道模式在 Python 脚本中很常见,实际上 C# 同样支持,尤其适合 AI agent 类应用。
容器镜像
Ubuntu 26.04 的容器镜像本月已经上线,tag 从 -noble 改为 -resolute。升级 Dockerfile 只需一条 sed:
$ grep dotnet/ Dockerfile.chiseled
FROM --platform=$BUILDPLATFORM mcr.microsoft.com/dotnet/sdk:10.0-noble AS build
FROM mcr.microsoft.com/dotnet/aspnet:10.0-noble-chiseled
$ sed -i "s/noble/resolute/g" Dockerfile.chiseled
替换后直接构建,并可通过资源限制运行:
docker build --pull -t aspnetapp -f Dockerfile.chiseled .
docker run --rm -it -p 8000:8080 -m 50mb --cpus .5 aspnetapp
Chiseled 镜像(极度精简,去掉了 shell 和包管理器)在 26.04 上同样可用,使用方式与 24.04 完全一致。需要注意:容器共享宿主机内核,在 24.04 主机上跑 26.04 容器时,内核版本仍为 6.x。
Native AOT
Ubuntu 26.04 提供了专门的 AOT 包,让构建自包含本地二进制变得更容易:
apt install -y dotnet-sdk-aot-10.0 clang
发布同一个 hello world 应用:
$ dotnet publish app.cs
$ du -h artifacts/app/*
1.4M artifacts/app/app
3.0M artifacts/app/app.dbg
二进制仅 1.4 MB,.dbg 是 native 符号文件(类似 Windows 的 PDB)。启动时间测试:
$ time ./artifacts/app/app
Hello Ubuntu Resolute Raccoon (development branch) from .NET .NET 10.0.5
real 0m0.003s
3 毫秒冷启动,速度惊人。
AOT 同样适合 Web 服务。使用已配置 <PublishAot>true</PublishAot> 的 releasesapi 示例:
$ dotnet publish
$ du -h bin/Release/net10.0/linux-x64/publish/releasesapi
13M bin/Release/net10.0/linux-x64/publish/releasesapi
包含大量 System.Text.Json 源生成元数据的完整 Web 服务,自包含大小仅 13 MB。启动后可直接查询:
$ curl -s http://localhost:5000/releases | jq '[.versions[] | select(.supported == true) | {version, supportEndsInDays}]'
[
{ "version": "10.0", "supportEndsInDays": 942 },
{ "version": "9.0", "supportEndsInDays": 207 },
{ "version": "8.0", "supportEndsInDays": 207 }
]
安装 .NET 8 和 9
Canonical 对“内置支持”和“可用性”做了明确区分:Ubuntu 26.04 内置 .NET 10,而 .NET 8 和 9 通过 dotnet-backports PPA 提供,属于“尽力支持”。
配置 PPA:
apt install -y software-properties-common
add-apt-repository ppa:dotnet/backports
apt update
之后可按版本查看或安装各种包:
$ apt list dotnet-*8.0
dotnet-sdk-8.0/resolute 8.0.126-0ubuntu1~26.04.1~ppa1 amd64
...
$ apt list aspnetcore-runtime-*
aspnetcore-runtime-10.0/resolute 10.0.5-0ubuntu1 amd64
aspnetcore-runtime-8.0/resolute 8.0.26-0ubuntu1~26.04.1~ppa1 amd64
aspnetcore-runtime-9.0/resolute 9.0.15-0ubuntu1~26.04.1~ppa1 amd64
backports PPA 目前覆盖的版本如下:
| Ubuntu 版本 |
通过 PPA 可用的 .NET 版本 |
| 26.04 LTS |
.NET 8.0、9.0 |
| 24.04 LTS |
.NET 6.0、7.0、9.0 |
| 22.04 LTS |
.NET 9.0、10.0 |
预计 .NET 11 正式发布时也会加入同一 PPA。
其他变化
Ubuntu 26.04 还带来一些值得关注的底层更新:
- Linux 7.0:团队计划在获得 26.04 VM 后尽快开始兼容性测试
- 后量子密码学:.NET 10 已添加支持,与 26.04 的方向一致
- cgroup v1 移除:26.04 不再支持 cgroup v1,但 .NET 多年前已完整支持 cgroup v2,对运行中的容器应用影响为零
参考
以上内容整理自官方博客。云栈社区将持续关注 Ubuntu 与 .NET 的最新进展,欢迎开发者前来交流分享。