跳到正文
博客园· 张善友·· 3 小时前AI 评分38

微软发布 dotnetup 公共预览版:官方 .NET 版 rustup 工具链管理器

装了这么多年 .NET,微软终于把 rustup 那套搬过来了 - 张善友

AI 导读

微软宣布 dotnetup 进入公共预览,定位为“.NET 版 rustup”的官方工具链管理器。它无需管理员权限,SDK、运行时与元数据全部装在用户目录,支持多版本共存,并可按 10.0、latest 等通道跟踪更新、钉住 10.0.3 这类精确版本,同时识别 global.json。

正文

dotnetuppreview-8c1303

dotnetup 公共预览版上手:一个官方出的 .NET 版本管理器

如果你同时写过 Rust 和 .NET,大概率有过这种心理落差:

Rust 那边,一条 rustup 命令,工具链装好、更新管好、多版本共存,一条龙。而 .NET 这边呢?Windows 上靠安装器,macOS 上 brew 还是官方 pkg 各执一词,Linux 上 apt、tarball、dotnet-install.sh 三条路线并存,装完文件散在系统目录里,想删干净都得查文档。新人入职第一天,光是"把 SDK 装对"就能耗掉半天。

这个局面终于有解了。微软前几天在 .NET 官方博客上宣布:dotnetup 进入公共预览(Public Preview)——一个官方的 .NET 工具链管理器,定位基本就是 ".NET 版的 rustup"。

它解决什么问题

官方列的几个核心诉求,翻译成人话:

不用管理员权限。 所有 SDK、运行时、元数据全部装在用户目录下,不碰系统目录,不需要 sudo,也不会留下一堆 root 拥有的文件。

多版本和平共处。 多个正式版、预览版、每日构建可以同时装着,互不干扰。这在以前用系统包管理器时几乎是噩梦。

按"意图"跟踪,而不是按版本号。 这是个比较妙的设计:你可以告诉它"我要 .NET 10 的最新版"或者"跟着最新稳定版走",之后每月的 servicing 更新它会自动帮你跟上。而精确版本(比如 10.0.3)则会被钉住,不会被更新冲掉。

认 global.json。 团队项目里钉版本的老机制继续有效,构建结果可预期。

还有一点博客里说得很直白:目标是大幅降低上手 .NET 的"概念数量"。以前你得先搞清楚自己平台上该用哪种安装方式,现在不用了,所有平台同一套命令。

三分钟上手

macOS 和 Linux 用户,终端里一行搞定(按你的 shell 选一个):

# macOS (zsh)
curl -fsSL https://aka.ms/dotnetup/get-dotnetup.sh | zsh

# Linux (bash)
curl -fsSL https://aka.ms/dotnetup/get-dotnetup.sh | bash

# PowerShell
irm https://aka.ms/dotnetup/get-dotnetup.ps1 | iex

装完后初始化一下:

dotnetup init

init 会做两件事:配置好 shell 环境变量,让 dotnet 命令直接可用;顺手把最新的稳定版 SDK 拉下来。

看看本地现在装了什么:

dotnetup list

日常最常用的一条命令

每个月 .NET 都会推 servicing 更新(安全修复为主)。以前要么等系统包管理器更新,要么自己手动装。现在就一条:

dotnetup update

它会重新解析你跟踪的通道,把匹配的最新版装上。语义是这样的:

  • 10.0 —— 在 .NET 10 这个大版本内跟最新
  • latest —— 跟着最新稳定 SDK 走,跨大版本也跟
  • 10.0.3 这种精确版本 —— 钉死,不动

更新完之后,它还会自动清理那些已经没有任何通道引用的旧组件,不用自己手动腾空间。

只想装某个运行时也行,比如只要 ASP.NET Core 的运行时:

dotnetup runtime install aspnetcore@10.0

玩预览版和每日构建的人有福了

以前想验证一个 bug 有没有在 nightly build 里修好,流程是:去 GitHub 翻原始 tarball、手动解压到自定义目录、手改环境变量。一套下来兴致全无。

现在预览版和每日构建是一等公民:

dotnetup sdk install preview      # 预览版 SDK
dotnetup runtime install daily    # 每日构建的运行时
dotnetup sdk install daily        # 每日构建的完整工具链

和稳定版并存,测完随手卸掉,干净利落。

工具自身的更新也内置了:

dotnetup self update

几个大家可能关心的问题

"这些我用 dotnet-install.sh 也能干啊?" 博客里的回答很耿直:确实能干大部分。但安装脚本不管"管理"——没有清单、不校验签名和 checksum、批量装多个版本更慢,也没有跨平台统一的 CLI。

要 root 吗? 不要。目前整个工具就是按用户态设计的。Windows 的系统级安装管理在后续路线图上。

能用在 CI 里吗? 很合适。不需要 root、非交互运行顺畅,天然适配容器化的 CI worker。官方还打算更进一步,未来直接把它集成进 GitHub Actions 和 Azure DevOps,替换掉这些流水线里现在依赖安装脚本的部分。

一点感想

说实话,这东西来得有点晚——rustup 2016 年就有了,nvm 更早。.NET 生态在安装这件事上"百花齐放"了这么多年,每种方式留下的系统状态都不一样,排查问题全靠老师傅经验。

但迟到总比不到好。从路线图看(Windows 系统级安装支持、CI/CD 原生集成、甚至给 AI 编程助手准备的 agent skills),微软是希望它最终成为安装 .NET 的唯一官方推荐方式。如果真能做到,以后新人入职的文档可以删掉一整页了。

目前还是公共预览阶段,macOS 和 Linux 体验最完整。有兴趣的可以装上试试,遇到问题去 GitHub 的 dotnet/sdk 仓库 discussions 区反馈,官方明确说了在收集意见。


相关链接:

来源:博客园 · cnblogs.com