已禁用多级查找

在 Windows 上,依赖框架的 .NET 应用程序不再在多个安装位置搜索框架。

以前的行为

在以前的版本中,依赖框架的 .NET 应用程序在 Windows 上的多个安装位置搜索框架。 位置为:

  • 通过 dotnet 运行应用程序时,相对于 dotnet 可执行文件的子目录。
  • 通过应用程序的可执行文件 (apphost) 运行应用程序时,由 DOTNET_ROOT 环境变量的值指定的位置(如果已设置)。
  • HKLM\SOFTWARE\dotnet\Setup\InstalledVersions<arch>\InstallLocation 中全局注册的安装位置(如果已设置)。
  • %ProgramFiles%\dotnet (或 %ProgramFiles(x86)%\dotnet 的默认安装位置,用于 64 位 Windows 上的 32 位进程。

此多级查找行为默认已启用,但可以通过设置环境变量 DOTNET_MULTILEVEL_LOOKUP=0来禁用。

新行为

面向 .NET 7 或更高版本的应用程序仅在一个位置查找框架,这是找到 .NET 安装的第一个位置。 通过 dotnet 运行应用程序时,框架仅在相对于可执行文件的 dotnet 子目录中搜索。 通过应用程序的可执行文件 (apphost) 运行该应用程序时,只会在找到 .NET 的下列第一个位置中搜索框架:

  • 环境变量的值 DOTNET_ROOT 指定的位置(如果已设置)。
  • HKLM\SOFTWARE\dotnet\Setup\InstalledVersions<arch>\InstallLocation 中全局注册的安装位置(如果已设置)。
  • %ProgramFiles%\dotnet (或 %ProgramFiles(x86)%\dotnet 的默认安装位置,用于 64 位 Windows 上的 32 位进程。

已引入的版本

.NET 7

破坏性变更的类型

此项更改可能会影响二进制兼容性

更改原因

多级查找导致了许多问题的出现:

  • 用户混淆:尽管从专用安装中运行 .NET,但应用程序仍可以选择全局或默认安装位置。
  • 平台(Windows 与非 Windows)之间的不一致。
  • 行为故障通常发生在自动化系统中:新版本的全局 .NET 安装可能会影响原本隔离的构建和测试。
  • 性能问题。

请确保在单个 .NET 安装位置安装了所需的 .NET 版本。 未能启动时发出的错误消息包括预期位置。

受影响的 API

没有。