多層級查閱已停用

在 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

無。