已禁用多级查找

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

旧行为

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

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

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

新行为

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

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

引入的版本

.NET 7

中断性变更的类型

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

更改原因

多级查找导致了许多问题:

  • 用户感到困惑:尽管是从专用安装中运行 .NET,但应用程序仍可以选择全局或默认安装位置。
  • 平台之间不一致(Windows 与非 Windows)。
  • 行为中断,通常发生在自动化系统中:新的全局 .NET 安装可能会影响其他隔离的生成和测试。
  • 性能问题。

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

受影响的 API

无。