Skrypty dnx omijają wybór zestawu SDK w pliku global.json

Skrypty dnx i dnx.cmd nie używają już .NET muxer do wybrania wersji zestawu SDK. Zamiast tego znajdują najnowszy zainstalowany zestaw SDK i wywołują go bezpośrednio, co pomija dowolny global.json plik w katalogu roboczym.

Wersja wprowadzona

SDK platformy .NET 10 10.0.302, 10.0.400 i .NET 11 w wersji zapoznawczej 6

Poprzednie zachowanie

Wcześniej skrypty dnx wywoływały dotnet dnx, które opierało się na multiplekserze platformy .NET, aby wybrać wersję zestawu SDK na podstawie dowolnego pliku global.json w katalogu roboczym. Jeśli global.json przypięto do wersji zestawu SDK sprzed platformy .NET 10, skrypty kończyły się niepowodzeniem i zwracały następujący błąd:

Unrecognized command or argument 'execute'

Począwszy od zestawu SDK platformy .NET 10 w wersji 10.0.302 (i nowszych wersji) oraz platformy .NET 11 w wersji zapoznawczej 6 skrypty dnx i dnx.cmd używają dotnet --list-sdks do identyfikowania najnowszego zainstalowanego zestawu SDK. Następnie wywołują dotnet exec <sdk-path>/dotnet.dll dnx bezpośrednio, z pominięciem multipleksera platformy .NET i jakiegokolwiek przypięcia zestawu SDK za pomocą global.json.

Typ zmiany przełamującej

Ta zmiana jest zmianą behawioralną.

Przyczyna zmiany

Niektóre polecenia interfejsu wiersza polecenia platformy .NET, w tym dnx, są uznawane za mechanizmy niezależne od wersji, które zawsze powinny być uruchamiane przy użyciu najnowszego zainstalowanego zestawu SDK. Poleganie na global.json oznaczało, że użytkownicy, którzy zablokowali starszą wersję zestawu SDK, aby ograniczyć ryzyko związane ze zmianami wpływającymi na kompilację, nieumyślnie powodowali również awarię dnx. W katalogach, w których przypięto pakiet SDK sprzed wersji .NET 10, polecenie dnx było niedostępne, co powodowało mylące błędy, a w niektórych przypadkach także limity czasu w narzędziach takich jak Copilot CLI.

Aby przywrócić poprzednie zachowanie, w którym selekcją zestawu SDK sterują program .NET muxer i global.json, uruchom jawnie dotnet dnx zamiast skryptu dnx.

Interfejsy API, których dotyczy problem

None.