複数レベルの検索の無効化

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 以降のバージョンをターゲットとするアプリケーションは、1 か所 (.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 を 1 か所の .NET インストール場所にインストールします。 起動に失敗したときに出力されるエラー メッセージには、想定される場所が含まれています。

影響を受ける API

なし。