dotnetup 环境配置

Note

dotnetup 为公共预览版。 在正式发布之前,其功能和行为可能会更改。

Dotnetup 可以配置环境,使其安装的 .NET SDK 和运行时可用。 它通过设置以下环境变量来执行此操作:

  • PATH:使 dotnet 命令在命令行上可用。 开发工具(如 Visual Studio 或 C# 开发工具包)也使用PATH来查找 .NET SDK 和运行时。
  • DOTNET_ROOT:告知依赖框架的应用程序可执行文件在何处查找.NET安装及其共享运行时。

Dotnetup 支持不同的访问方式,用于控制这些环境变量设置在何处。 可以在初始 dotnetup 设置时或稍后使用 dotnetup env 命令选择访问模式。

访问模式 Behavior
none 不修改这些环境变量。 使用 dotnetup dotnet 运行 .NET。
shell 修改 shell 配置文件以设置这些环境变量。 从该 shell 启动的进程使用 dotnetup 安装的.NET SDK 和运行时。
everywhere 修改系统 PATH 并设置用户级 DOTNET_ROOT 环境变量。 仅适用于Windows。

默认情况下,无论访问模式设置如何,dotnetup 也会将自身添加到 PATH。 这可以通过 dotnetup env set --dotnetup-on-path <true|false> 控制。

Everywhere 模式注意事项

在 Windows 中,默认启用“全局模式”,以确保通过 dotnetup 安装的 SDK 和运行时能够从开发工具以及使用 cmd 作为 Shell 的终端中访问。 但是,有一些事项需要注意,主要是它如何与系统范围内安装的 .NET SDK 和运行时交互。

.NET 面向整个计算机的安装位于 Program Files 文件夹下。 可以使用可从.NET下载页下载的安装程序安装它们。 Visual Studio以计算机范围方式安装 .NET SDK 和运行时,依赖框架的应用程序的安装程序也可以在计算机范围的位置安装它们所依赖的 .NET 运行时。

在全局模式模式下,用户本地 dotnetup 托管的 .NET 安装根目录将覆盖计算机范围的 .NET 安装根目录。 这意味着程序文件中安装的.NET SDK 和运行时将不可用。 如果未安装匹配的 SDK,依赖于这些 SDK 的项目将无法生成。 如果未安装匹配的运行时,依赖框架的应用程序将无法启动,并显示“必须安装或更新.NET才能运行此应用程序”。

为了避免这些故障,初始 dotnetup 安装程序提供了迁移现有系统.NET SDK 和运行时安装的选项。 还可以通过运行 dotnetup sdk install --migrate-from-system 显式迁移 SDK,或通过运行 dotnetup runtime install --migrate-from-system 显式迁移运行时。

打开或关闭 everywhere 模式需要修改系统 PATH,这需要提升权限(即 UAC 提示审批或“以管理员身份运行”)。 这是因为.NET的计算机范围的安装程序将 Program Files .NET安装根添加到系统 PATH,并且系统 PATH 在解析命令时优先于用户级 PATH。 因此,dotnetup 需要修改系统 PATH,以使 dotnetup .NET 安装根目录在 PATH 中优先生效。

由于系统 PATH 适用于所有用户,因此这些更改可能会影响其他用户。 添加到系统 PATH 的路径默认位于用户的本地 AppData 文件夹下。 这通常不会可供其他用户访问,因此不会影响解析为哪个版本的 dotnet。 但是,提升的进程(即以管理员身份运行)能够读取该路径,最终可能会意外地解析属于其他用户的 .NET SDK 或运行时。

支持的 shell

配置和脚本生成支持:

  • Bash
  • Z shell
  • 鱼
  • Pwsh (PowerShell Core)
  • PowerShell

如果不传入 --shell,dotnetup 则检测当前 shell。 当检测不可用或想要更新其他配置文件时,请使用显式 shell:

dotnetup env set shell --shell zsh

存储和观察到的状态

dotnetup.config.json 存储所选访问模式以及 dotnetup 是否应加入 PATH。 dotnetup env show 将该配置与当前配置文件和环境进行比较。 如果观察到的状态不匹配,它将报告漂移。

重新应用存储的配置以更正偏移:

dotnetup env set

当前终端

对配置文件和 Windows 环境的更改不会重写当前进程的环境。 打开新终端,重新加载修改后的配置文件,或者评估生成的脚本。

对于 Bash 或 Z shell:

eval "$(dotnetup env script)"

对于 PowerShell:

dotnetup env script --shell pwsh | Invoke-Expression

env script 如果不传递选择选项,则遵循存储的配置。 使用 --dotnet、--dotnetup 或同时使用两者来选择生成的内容。

删除环境配置

删除所有托管环境配置:

dotnetup env clear

此命令等效于:

dotnetup env set none --dotnetup-on-path false

它不会卸载 SDK 或运行时。