Lookup auf mehreren Ebenen ist deaktiviert

Unter Windows suchen frameworkabhängige .NET-Anwendungen nicht mehr an mehreren Installationsspeicherorten nach Frameworks.

Vorheriges Verhalten

In früheren Versionen suchte eine frameworkabhängige .NET-Anwendung an mehreren Installationsspeicherorten unter Windows nach Frameworks. Die Speicherorte waren:

  • Bei Ausführung der Anwendung über dotnet Unterverzeichnisse relativ zur ausführbaren dotnet-Datei.
  • Beim Ausführen der Anwendung über die ausführbare Datei (apphost) der durch den Wert der DOTNET_ROOT-Umgebungsvariablen angegebene Speicherort (sofern festgelegt).
  • Der global registrierte Installationsspeicherort in HKLM\SOFTWARE\dotnet\Setup\InstalledVersions<arch>\InstallLocation (sofern festgelegt).
  • Der Standardinstallationsspeicherort von %ProgramFiles%\dotnet (oder %ProgramFiles(x86)%\dotnet für 32-Bit-Prozesse unter 64-Bit-Windows).

Dieses Verhalten für das Lookup auf mehreren Ebenen war standardmäßig aktiviert, konnte aber durch Festlegen der Umgebungsvariable DOTNET_MULTILEVEL_LOOKUP=0 deaktiviert werden.

Neues Verhalten

Anwendungen, die auf .NET 7 oder eine höhere Version ausgerichtet sind, suchen nur an einem Speicherort nach Frameworks. Dies ist der erste Speicherort, an dem eine .NET-Installation gefunden wird. Beim Ausführen einer Anwendung über dotnet werden Frameworks nur in Unterverzeichnissen relativ zur ausführbaren dotnet-Datei gesucht. Wenn eine Anwendung über ihre ausführbare Datei (apphost) ausgeführt wird, wird nur am ersten der folgenden Speicherorte, an denen .NET gefunden wird, nach Frameworks gesucht:

  • Der durch den Wert der DOTNET_ROOT-Umgebungsvariable angegebene Speicherort (sofern festgelegt).
  • Der global registrierte Installationsspeicherort in HKLM\SOFTWARE\dotnet\Setup\InstalledVersions<arch>\InstallLocation (sofern festgelegt).
  • Der Standardinstallationsspeicherort von %ProgramFiles%\dotnet (oder %ProgramFiles(x86)%\dotnet für 32-Bit-Prozesse unter 64-Bit-Windows).

Eingeführt in Version

.NET 7

Typ des Breaking Changes

Diese Änderung kann sich auf die binäre Kompatibilität auswirken.

Grund für die Änderung

Durch Suche auf mehreren Ebenen wurden zahlreiche Probleme verursacht:

  • Verwirrung der Benutzer*innen: Die Anwendung kann einen globalen oder Standardinstallationsspeicherort auswählen, obwohl .NET über eine private Installation ausgeführt wird.
  • Inkonsistenz zwischen Plattformen (Windows im Vergleich zu anderen).
  • Verhaltensunterbrechungen, häufig in automatisierten Systemen: Eine neue globale .NET-Installation kann sich auf ansonsten isolierte Builds und Tests auswirken.
  • Leistungsaspekte.

Stellen Sie sicher, dass die erforderliche Version von .NET am einzelnen .NET-Installationsspeicherort installiert ist. Die Fehlermeldungen, die bei einem Fehler beim Starten ausgegeben werden, enthalten den erwarteten Speicherort.

Betroffene APIs

Keine.