已禁用多级查找
在 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
无。