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 derDOTNET_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.
Empfohlene Maßnahme
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.