dotnetup: в .NET наконец появился менеджер версий SDK в стиле rustup
Microsoft создаёт dotnetup, официальный кроссплатформенный инструмент для установки, отслеживания и переключения между SDK и средами выполнения .NET. Вот что он делает и на каком этапе находится в июне 2026 года.
Долгие годы управление SDK для .NET означало жонглирование тремя отдельными вещами: автономными установщиками со страницы загрузки, скриптами dotnet-install для CI и инструментом dotnet-core-uninstall для очистки горы старых версий, остающихся позади. Никогда не существовало единой команды, которая устанавливает, отслеживает и переключает SDK так, как rustup делает для Rust или nvm для Node. С июня 2026 года это меняется. Microsoft создаёт dotnetup, и он уже встроен в то, как SDK для .NET собирает сам себя.
Что такое dotnetup на самом деле
dotnetup — это официальный кроссплатформенный менеджер версий для SDK и сред выполнения .NET. Его единственная задача — устанавливать компоненты в каталог с областью видимости пользователя без необходимости повышения прав, отслеживать установленное в манифесте и чисто переключать активную версию. Без запроса администратора, без MSI, без вмешательства в реестр.
Ключевые особенности поведения:
- Устанавливает SDK и среды выполнения для пользователя, поэтому вам никогда не нужны
sudoили терминал с повышенными правами. - Читает
global.json, чтобы разрешить и установить точный SDK, который закрепляет репозиторий. - Отслеживает установленные компоненты в манифесте для проверяемых обновлений и чистых удалений.
- Поддерживает несколько сред выполнения рядом друг с другом для сценариев multi-targeting.
- Поставляется как скомпилированный с AOT и подписанный бинарный файл для быстрого запуска и безопасности цепочки поставок.
Единственная команда, подтверждённая в отслеживающем issue dotnet/sdk, — это путь установки, используемый здесь для получения предварительного SDK в скрипте сборки:
dotnetup sdk install preview
Более широкий набор команд (вывод списка установленных версий, установка значения по умолчанию, удаление) всё ещё дорабатывается открыто, поэтому относитесь к любому более длинному примеру как к иллюстративному, а не окончательному.
Почему global.json — это настоящий выигрыш
Болезненная часть работы с .NET в нескольких репозиториях сегодня — это несоответствие global.json. Вы клонируете репозиторий, запускаете dotnet build и получаете ошибку, потому что он закрепляет SDK, которого у вас нет. Ваши единственные варианты — разыскать нужный установщик или отредактировать файл.
{
"sdk": {
"version": "10.0.301",
"rollForward": "latestPatch"
}
}
С менеджером версий, который понимает этот файл, разрешение превращается в один шаг: направьте dotnetup на репозиторий и позвольте ему получить закреплённый SDK в ваш профиль пользователя. Это та же эргономика, которая у разработчиков Rust есть уже годы благодаря rust-toolchain.toml.
На каком этапе он находится прямо сейчас
dotnetup находится во внутренней предварительной версии. На сайте .NET ещё нет установщика в одну строку, и практический способ попробовать его сегодня — собрать из исходного кода. Публичная предварительная версия запланирована на ближайшие месяцы. Примечательно, что ветка main репозитория dotnet/sdk уже использует dotnetup как часть собственной сборки, что является сильным сигналом того, что это и есть предполагаемое будущее установки .NET, а не эксперимент.
Если вы поддерживаете конвейеры CI или вводите разработчиков в репозитории со строго закреплёнными SDK, это инструмент, за которым стоит следить. Отслеживайте прогресс в issue репозитория dotnet/sdk об использовании dotnetup в скриптах сборки и в информационном issue, отмечающем, что ветка main теперь собирается с его помощью.
Comments
Sign in with GitHub to comment. Reactions and replies thread back to the comments repo.