DNX-Skripts umgehen die SDK-Auswahl in global.json

Die Skripte dnx und dnx.cmd verwenden den .NET Muxer nicht mehr, um die SDK-Version zu bestimmen. Stattdessen finden sie das neueste installierte SDK und rufen es direkt auf, wodurch alle global.json Dateien im Arbeitsverzeichnis umgangen werden.

Eingeführt in Version

.NET 10 SDK 10.0.302, 10.0.400 und .NET 11 Preview 6

Bisheriges Verhalten

Zuvor riefen die dnx-Skripte dotnet dnx auf, das sich auf den .NET-Muxer stützte, um die SDK-Version anhand einer beliebigen global.json-Datei im Arbeitsverzeichnis auszuwählen. Wenn global.json eine SDK-Version festgelegt hatte, die älter als .NET 10 war, schlugen die Skripts mit dem folgenden Fehler fehl:

Unrecognized command or argument 'execute'

Ab .NET 10 SDK 10.0.302 (und höher) und .NET 11 Preview 6 verwenden die Skripts dnx und dnx.cmddotnet --list-sdks, um das neueste installierte SDK zu ermitteln. Sie rufen dann dotnet exec <sdk-path>/dotnet.dll dnx direkt auf und umgehen dabei den .NET-Muxer sowie jede global.json-SDK-Fixierung.

Art der einschneidenden Änderung

Diese Änderung ist eine Verhaltensänderung.

Grund für die Änderung

Einige .NET CLI-Befehle, einschließlichdnx, gelten als versionsunabhängige Features, die immer mit dem neuesten installierten SDK ausgeführt werden sollten. Die Abhängigkeit von global.json führte dazu, dass Benutzer, die zur Verringerung des Risikos buildbeeinflussender Änderungen auf eine ältere SDK-Version festgelegt waren, auch dnx unbeabsichtigt funktionsunfähig machten. In Ordnern, in denen ein vorab .NET 10 SDK angeheftet wurde, war der dnx Befehl nicht verfügbar, was zu verwirrenden Fehlern und in einigen Fällen Timeouts in Tools wie Copilot CLI führte.

Um das vorherige Verhalten wiederherzustellen, bei dem der .NET-Muxer und global.json die SDK-Auswahl steuern, führen Sie dotnet dnx explizit anstelle des Skripts dnx aus.

Betroffene APIs

Keiner.