除非通过 DOTNET_TOOLS_ALLOW_MANIFEST_IN_ROOT 环境变量重写,否则 .NET 不再在 Windows 的根文件夹中查找本地工具清单文件。 此更改不会影响 Linux 或 macOS。
以前的行为
以前,.NET SDK 本地工具在搜索工具清单时检查了所有平台上的根文件夹。 搜索继续从当前目录向上目录树到根文件夹,直到找到清单。 在每个级别,.NET 都会在 .config 子文件夹中搜索名为 dotnet-tools.json的工具清单。 在 Windows 系统上,如果未找到其他工具清单,SDK 最终会在 C:\.config\dotnet-tools.js 中查找工具清单。
新行为
除非通过 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.js 。 当管理员运行 dotnet 工具命令时,该工具可能会从文件中读取恶意配置信息,并下载并运行恶意工具。
建议的措施
若要禁用新行为,请将 DOTNET_TOOLS_ALLOW_MANIFEST_IN_ROOT 环境变量 true 设置为或 1。