根文件夹中的工具清单

除非通过 DOTNET_TOOLS_ALLOW_MANIFEST_IN_ROOT 环境变量重写,否则 .NET 不再在 Windows 上的根文件夹中查找本地工具清单文件。 此更改不会影响 Linux 或 macOS。

旧行为

以前,在搜索工具清单时,.NET SDK 本地工具会检查所有平台上的根文件夹。 继续从当前目录沿着目录树搜索到根文件夹,直到找到清单。 在每个级别,.NET 会在 .config 子文件夹中搜索名为 dotnet-tools.json 的工具清单。 在 Windows 系统上,如果未找到其他工具清单,SDK 最终会在 C:\.config\dotnet-tools.json 中查找工具清单。

新行为

除非通过 DOTNET_TOOLS_ALLOW_MANIFEST_IN_ROOT 环境变量重写,否则在默认情况下,.NET 将不再在 Windows 上当前目录树的根文件夹中进行搜索。 默认情况下,DOTNET_TOOLS_ALLOW_MANIFEST_IN_ROOT 设置为 false

引入的版本

  • .NET SDK 7.0.3xx
  • .NET SDK 7.0.1xx
  • .NET SDK 6.0.4xx
  • .NET SDK 6.0.3xx
  • .NET SDK 6.0.1xx
  • .NET SDK 3.1.4xx

中断性变更的类型

此更改为行为更改

更改原因

此更改旨在解决安全问题。 由于所有用户都可以在 Windows 上的 C:\ 目录中创建文件和文件夹,因此权限低的攻击者可以劫持 C:\.config\dotnet-tools.json 文件。 当管理员运行 dotnet 工具命令时,该工具可能会从文件中读取恶意配置信息,并下载和运行恶意工具。

若要禁用新行为,请将 DOTNET_TOOLS_ALLOW_MANIFEST_IN_ROOT 环境变量设置为 true1

请参阅