首页 > 资讯 > 微软推出 dotnetup:多版本管理更省心,安装方式却让开发者皱眉

微软推出 dotnetup:多版本管理更省心,安装方式却让开发者皱眉

InfoQ 2026-11-02 22:10 6 阅读 查看原文

微软发布了 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 模式修改 shell 配置文件;everywhere 模式是仅适用于 Windows 的默认模式,会修改系统 PATH,因此需要提升权限。

文档还警告说,everywhere模式的优先级高于全机器安装的版本,包括 Visual Studio 安装的版本。因此,如果某个项目需要的 SDK 尚未通过 dotnetup 安装,构建就会失败。为避免这种情况,据称安装流程会提供迁移现有全机器安装版本的选项。

据报道,每月的维护更新可以通过一条 dotnetup update 命令完成:它会重新解析所有已跟踪的通道,并安装各通道匹配的最新版本。也可以针对单个运行时执行操作,例如 dotnetup runtime install aspnetcore@10.0。文档列出的受支持组件包括 SDK、.NET 运行时、ASP.NET Core 运行时和 Windows Desktop 运行时。文章称,更新后,dotnetup 会移除不再被任何需求使用的组件;sdk uninstall 和 runtime uninstall 也会触发相同的清理操作。

此外,预览版和每日构建版可以通过 dotnetup sdk install preview 或 dotnetup runtime install daily 并行安装,不过文档指出,每日构建版没有代码签名。dotnetup self update 用于更新工具本身。与 dotnet-install 脚本相比,文章称 dotnetup 能跟踪已安装的组件、验证签名和校验和、更快地安装多个版本,并在所有平台上提供统一的命令行界面。公布的路线图包括 Windows 上的管理员级安装、替换 GitHub Actions 和 Azure DevOps 任务中基于脚本的部分,以及提供智能体技能,让 AI 助手默认使用这款工具。

与此同时,在 r/dotnet 上,一位已使用该工具数月的开发者称赞它简化了 Linux 上的配置,但获赞最多的评论提出疑问:既然已有不少人使用 mise,为什么还要选择 dotnetup?

其他人批评了通过 curl 获取脚本并直接交给 shell 执行的引导方式,要求提供 winget、apt 或 Homebrew 软件包,指出 Visual Studio 无法识别 dotnetup 安装的版本,并希望它也能管理 dotnet-ef 等命令行工具。Husk 在博客评论区回复称,计划在完成用户验证后提供软件包。

感兴趣的读者可以在 Microsoft Learn 上查看完整文档,包括命令参考和遥测详情;反馈则可提交至 dotnet/sdk GitHub Discussions 的 dotnetup 分类。

原文链接:

https://www.infoq.com/news/2026/10/dotnetup-preview/