Вопрос или проблема
Я следовал официальным инструкциям для установки последней версии .NET SDK. Я выбрал метод “Менеджер пакетов (поток Microsoft)”. После выполнения этих инструкций и запуска dotnet --version
я получил следующий вывод:
Команда не может быть загружена, возможно, потому что:
* Вы намеревались выполнить приложение .NET:
Приложение '--version' не существует.
* Вы намеревались выполнить команду .NET SDK:
Никакие .NET SDK не были найдены.
Скачайте .NET SDK:
https://aka.ms/dotnet/download
Узнайте о разрешении SDK:
https://aka.ms/dotnet/sdk-not-found
Я прочитал обе эти веб-страницы, но они не предоставляют мне решения. Одна из них возвращает меня к началу процесса установки .NET SDK. Другая рассказывает о том, как работает разрешение SDK, в основном когда запускаются приложения. Но это не помогает мне с инструментом CLI dotnet
.
Мне было интересно, что если я запускаю dotnet --info
, я получаю следующий вывод, который подтверждает, что он считает, что ни один SDK не установлен:
Хост:
Версия: 7.0.9
Архитектура: x64
Хэш: 8e9a17b221
Установленные .NET SDK:
Никаких SDK не найдено.
Установленные .NET среды выполнения:
Microsoft.AspNetCore.App 7.0.9 [/usr/lib/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.NETCore.App 7.0.9 [/usr/lib/dotnet/shared/Microsoft.NETCore.App]
Другие найденные архитектуры:
Нет
Переменные окружения:
DOTNET_ROOT [/usr/lib/dotnet]
Файл global.json:
Не найден
Узнайте больше:
https://aka.ms/dotnet/info
Скачайте .NET:
https://aka.ms/dotnet/download
Я думаю, что это странно, потому что если я использую APT, чтобы проверить, какие пакеты у меня установлены, я вижу вывод, который заставляет думать, что после выполнения официальных инструкций по установке у меня действительно была установлена одна версия SDK (7.0.109):
$ sudo apt list --installed | grep dotnet
ПРЕДУПРЕЖДЕНИЕ: apt не имеет стабильного интерфейса CLI. Используйте с осторожностью в скриптах.
dotnet-apphost-pack-7.0/jammy-updates,jammy-security,now 7.0.109-0ubuntu1~22.04.1 amd64 [установлено, автоматически]
dotnet-host-7.0/jammy-updates,jammy-security,now 7.0.109-0ubuntu1~22.04.1 amd64 [установлено, автоматически]
dotnet-hostfxr-7.0/jammy-updates,jammy-security,now 7.0.109-0ubuntu1~22.04.1 amd64 [установлено, автоматически]
dotnet-runtime-7.0/jammy-updates,jammy-security,now 7.0.109-0ubuntu1~22.04.1 amd64 [установлено, автоматически]
dotnet-sdk-7.0/jammy,now 7.0.306-1 amd64 [установлено]
dotnet-targeting-pack-7.0/jammy-updates,jammy-security,now 7.0.109-0ubuntu1~22.04.1 amd64 [установлено, автоматически]
Моя проблема заключалась в том, что я установил версию 7 .NET SDK через сочетание пакетов из потока Microsoft и пакетов из потока Ubuntu. Это описано более подробно в их шаги по устранению неполадок APT. Я использовал 22.04 через WSL, поэтому эта проблема касалась и меня.
Моим решением было следовать их рекомендуемому подходу для людей, которые по какой-либо причине не полагаются на поток Microsoft, который заключался в том, чтобы полностью удалить поток Microsoft из моей системы, а затем следовать их инструкциям по установке, используя поток Ubuntu. После того как я это сделал, мой вывод dotnet --info
показывает установленный SDK:
.NET SDK:
Версия: 7.0.109
Хэш: 3e9283a8e9
Среда выполнения:
Название ОС: ubuntu
Версия ОС: 23.04
Платформа ОС: Linux
RID: ubuntu.23.04-x64
Базовый путь: /usr/lib/dotnet/sdk/7.0.109/
Хост:
Версия: 7.0.9
Архитектура: x64
Хэш: 8e9a17b221
Установленные .NET SDK:
7.0.109 [/usr/lib/dotnet/sdk]
Установленные .NET среды выполнения:
Microsoft.AspNetCore.App 7.0.9 [/usr/lib/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.NETCore.App 7.0.9 [/usr/lib/dotnet/shared/Microsoft.NETCore.App]
Другие найденные архитектуры:
Нет
Переменные окружения:
DOTNET_ROOT [/usr/lib/dotnet]
Файл global.json:
Не найден
Узнайте больше:
https://aka.ms/dotnet/info
Скачайте .NET:
https://aka.ms/dotnet/download
Поскольку я использовал 22.04, но хотел установить и использовать последнюю стабильную версию SDK (которая на сегодняшний день 7), мне сначала пришлось обновиться до 23.04. Я сделал это, следуя инструкциям, которые нашел на стороннем сайте, которые заключались в том, чтобы запустить sudo do-release-upgrade
. Когда я это сделал, мне сказали, что я уже использую последнюю версию, на которую могу обновиться, если не изменю конфигурационный файл и не попробую снова. Я следовал инструкциям, затем снова попытался сделать обновление, и затем я работал на 23.04, чтобы я мог выполнить вышеуказанные шаги для установки .NET SDK 7.
Ответ или решение
Ошибка "Команда не может быть загружена" при выполнении команды dotnet после установки .NET SDK
При установке .NET SDK на Ubuntu могут возникать различные ошибки, и одна из распространённых — это ошибка "Команда не может быть загружена", возникающая при выполнении команды dotnet
. Давайте разберёмся в возможных причинах и путях их решения.
Причины возникновения ошибки
-
Отсутствие установленного SDK:
Ошибка может возникнуть из-за того, что SDK не установлен или не распознаётся системой. В вашем случае, выполнение командыdotnet --info
подтвердило, что ни один SDK не установлен, несмотря на информацию из APT, что пакеты SDK присутствуют:.NET SDKs installed: No SDKs were found.
-
Смешанная установка из разных источников:
Поскольку вы установили часть SDK из пакетов Microsoft и другую часть — из пакетов Ubuntu, может возникнуть конфликт. Официальная документация упоминает, что такая ситуация может привести к проблемам с распознаванием установленных компонентов. -
Неправильная настройка версии Ubuntu:
Убедитесь, что используемая вами версия Ubuntu поддерживает выбираемую версию .NET SDK. Например, для установки .NET SDK 7.0 может потребоваться обновление до версии Ubuntu не ниже 22.04.
Решение проблемы
-
Удаление конфликтующих пакетов:
Вам нужно удалить пакеты, установленные из пакета Microsoft, и затем установить .NET SDK заново, используя только источники Ubuntu. Сначала выполните:sudo apt remove dotnet-sdk-7.0 dotnet-host-7.0 dotnet-runtime-7.0 sudo apt autoremove
-
Очистка репозиториев:
Если вы использовали PPA или другие внешние репозитории для установки .NET SDK, убедитесь, что они больше не включены в ваш список источников. Проверьте файлы в/etc/apt/sources.list.d/
и удалите ненужные записи. -
Установка .NET SDK из Ubuntu-репозитория:
После удаления старых пакетов настройте и установите .NET SDK из официальных репозиториев Ubuntu:sudo apt update sudo apt install dotnet-sdk-7.0
-
Проверка версии:
По завершении установки проверьте правильность установки SDK:dotnet --info
Ожидается увидеть список установленных SDK и рантаймов.
-
Обновление системы:
Если вы находитесь на устаревшей версии Ubuntu (например, 22.04), вам, возможно, потребуется обновить систему до более свежей версии. Для этого выполните:sudo do-release-upgrade
Если система сообщает, что вы уже на последней версии, возможно, потребуется изменить конфигурацию системы (например, в файле
/etc/update-manager/release-upgrades
), чтобы разрешить обновление до следующего релиза. -
Дополнительные рекомендации:
Проверьте, установлены ли все зависимости и библиотеки, необходимые для работы .NET SDK. Иногда возвращение к чистой установке операционной системы или использование контейнеризации (например, Docker) для разработки может существенно упростить процесс.
Заключение
Чтобы решить проблему с ошибкой "Команда не может быть загружена" при установке .NET SDK на Ubuntu, важно тщательно следить за тем, как вы устанавливаете пакеты, и избегать смешанных источников. Сначала удалите конфликтующие элементы, затем установите SDK из официальных репозиториев Ubuntu. Не забывайте также следить за совместимостью вашей версии Ubuntu с используемой версией SDK. Это поможет вам избежать подобных проблем в будущем и упростит процесс разработки на .NET.