微软发布 dotnetup 预览版:多版本管理换思路,安装方式引开发者争议
微软发布了 dotnetup 公开预览版。这款跨平台工具链管理器可以在用户账户内安装、更新和移除 .NET SDK 与运行时,而不是将它们安装到由系统管理的目录中。据 .NET Blog 报道,.NET SDK 项目经理 Chet Husk 于 10 月 15 日宣布了这款工具,其设计借鉴了 rustup 和 nvm。
微软上线了 dotnetup 的公开预览版。它是一个跨平台工具链管理器,能把 .NET SDK 和运行时装进用户账户,更新、卸载也在同一范围内完成,不再写入系统统一管理的目录。据 .NET Blog 报道,.NET SDK 项目经理 Chet Husk 在 10 月 15 日公布了这款工具,思路参考了 rustup 与 nvm。
文档提醒,预览阶段各版本之间的命令和行为都可能调整,生产环境机器还是得用安装程序、包管理器或 Visual Studio。
公告说,这套设计盯的是安装意图,版本号本身并不是跟踪对象。开发者可以给出一个通道,比如latest、lts、preview、daily也可以直接点名10这类主版本号、10.0这类次版本号,或者10.0.1xx这类功能带,dotnetup 会把它解析成对应的发布版本。文章提到,一旦指定了精确版本,后续更新时这个版本不会变动。
几个需求可以指向同一个受管理的安装版本。工具还会读取离当前目录最近的 global.json,让团队构建结果保持确定。文档还说明,在 Windows、macOS 和 Linux 上,文件放在用户的本地数据目录;dotnetup 不会写入Program Files\dotnet 或 /usr/share/dotnet。
安装环节,用户通过curl 或 irm到 aka.ms 拿引导脚本。文档称,脚本先校验 SHA-512 校验和,再把可执行文件放进~/.dotnetup;随后,dotnetup init工具装好后会拉取最新的稳定版 SDK,并完成 shell 配置。文档给出三种接入模式:none 模式通过 dotnetup dotnet其中一种跑 .NET 时不碰环境;另一种会改写 shell 配置文件;还有一种叫 everywhere 模式,只在 Windows 上作为默认项,它动的是系统 PATH,所以要提权才能用。shelleverywhere
文档同时提醒,everywhere 模式的优先级压过全机器安装的版本,Visual Studio 装的那份也算在内。某个项目要用的 SDK 若还没经 dotnetup 装过,构建就会失败。据称安装流程提供了迁移现有全机器安装版本的选项,用来避开这个坑。
每月的维护更新,据说一条 dotnetup update 命令就能搞定:它会重新解析所有已跟踪的通道,把各通道对应的最新版本装上。也可以只针对单个运行时动手,比如文档列出的受支持组件有 SDK、.NET 运行时、ASP.NET Core 运行时和 Windows Desktop 运行时。文章称,更新完成后,dotnetup 会把不再被任何需求引用的组件清掉;dotnetup runtime install aspnetcore@10.0sdk uninstall 和 runtime uninstall同样的清理动作也会被触发。
预览版和每日构建版则能通过并行安装。不过文档指出,每日构建版没有代码签名。dotnetup self update 用来更新工具自身。文章拿它跟 dotnet-install 脚本做了对比,称 dotnetup 能跟踪已装组件、校验签名与校验和、更快地装多个版本,并在所有平台给出统一的命令行界面。公布的路线图里有 Windows 上的管理员级安装、替换 GitHub Actions 和 Azure DevOps 任务中基于脚本的部分,还有提供智能体技能,让 AI 助手默认使用这款工具。dotnetup sdk install preview 或 dotnetup runtime install daily
另一边,r/dotnet 上一位用了几个月的开发者夸它在 Linux 上把配置变简单了。可获赞最多的评论反问:已经有不少人在用 mise,凭什么还要选 dotnetup?
另一些人则批评了从取脚本、直接丢给 shell 执行的引导方式,要求提供 winget、apt 或 Homebrew 软件包,还指出 Visual Studio 认不出 dotnetup 装的版本,并希望它能顺带管理 dotnet-ef 这类命令行工具。Husk 在博客评论区回应说,打算在完成用户验证之后提供软件包。curl
想细看的读者可以去 Microsoft Learn 翻完整文档,命令参考和遥测详情都在里面;反馈则能提交到 dotnet/sdk GitHub Discussions 的 dotnetup 分类。