在 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
没有。