Установка пакета SDK для .NET или среды выполнения .NET с использованием пакета Snap

Для установки пакета SDK для .NET или среды выполнения .NET можно использовать пакет Snap. Пакеты Snap — это отличная альтернатива диспетчеру пакетов, встроенному в дистрибутив Linux. В этой статье описано, как установить .NET с использованием пакета Snap.

Snap-пакет — это пакет приложения и его зависимостей, которые работают без изменений во многих разных дистрибутивах Linux. Snap-пакеты можно найти и установить с помощью Snap Store. Дополнительные сведения о Snap см. в этой статье.

Внимание!

Пакеты Snap не поддерживаются в WSL2 в Windows 10. В качестве альтернативы можно использовать скрипт dotnet-install или диспетчер пакетов для соответствующего дистрибутива WSL2. Такой способ не рекомендуется, но вы можете попытаться включить пакет Snap с помощью неподдерживаемого возможного решения, описываемого на форумах snapcraft.

Выпуски .NET

В пакете Snap доступны только поддерживаемые (✔️) версии пакета SDK для .NET. Все версии среды выполнения .NET доступны в пакете Snap, начиная с версии 2.1. В следующей таблице перечислены выпуски .NET (и .NET Core):

✔️ Поддерживается ❌ Не поддерживается
5,0 3.0
3.1 (LTS) 2.2
2.1 (LTS) 2,0
1,1
1.0

Дополнительные сведения о жизненном цикле выпусков .NET см. в разделе Политика поддержки .NET Core и .NET 5.

Пакет SDK или среда выполнения

Если вы хотите разрабатывать приложения .NET, установите пакет SDK (включает среду выполнения). Если нужно просто запустить приложения, установите среду выполнения. Если вы устанавливаете среду выполнения, мы рекомендуем установить среду выполнения ASP.NET Core, так как она включает в себя среды выполнения .NET и ASP.NET Core.

Если вы уже установили пакет SDK или среду выполнения, с помощью команд dotnet --list-sdks и dotnet --list-runtimes узнайте, какие версии установлены. Дополнительные сведения см. в статье Проверка того, установлена ли платформа .NET.

Установка пакета SDK

Пакеты Snap для пакета SDK для .NET публикуются с одним и тем же идентификатором: dotnet-sdk. Конкретную версию пакета SDK можно установить, указав канал. Пакет SDK содержит соответствующую среду выполнения. В следующей таблице перечислены каналы.

Версия .NET Пакет Snap или канал
5,0 5.0 или latest/stable
3.1 (LTS) 3.1 или lts/stable
2.1 (LTS) 2.1

Выполните команду snap install, чтобы установить Snap-пакет пакета SDK для .NET. Используйте параметр --channel, чтобы указать, какую версию следует установить. Если этот параметр отсутствует, используйте latest/stable. В этом примере указан 5.0:

sudo snap install dotnet-sdk --classic --channel=5.0

Затем зарегистрируйте команду dotnet для системы, выполнив команду snap alias:

sudo snap alias dotnet-sdk.dotnet dotnet

Эта команда имеет следующий формат: sudo snap alias {package}.{command} {alias}. Вы можете выбрать любое имя {alias}. Например, вы можете присвоить команде имя после установки конкретной версии с помощью Snap-пакета: sudo snap alias dotnet-sdk.dotnet dotnet50. При использовании команды dotnet50 вы вызываете эту конкретную версию .NET. Выбор другого псевдонима несовместим с инструкциями из большинства учебников и примеров, так как в них требуется использовать команду dotnet.

Установка среды выполнения

Пакеты Snap для среды выполнения .NET публикуются с собственными идентификаторами пакета. В следующей таблице перечислены идентификаторы пакетов:

Версия .NET Snap-пакет
5,0 dotnet-runtime-50
3.1 (LTS) dotnet-runtime-31
3.0 dotnet-runtime-30
2.2 dotnet-runtime-22
2.1 (LTS) dotnet-runtime-21

Выполните команду snap install, чтобы установить Snap-пакет среды выполнения .NET. В этом примере устанавливается .NET 5.0:

sudo snap install dotnet-runtime-50 --classic

Затем зарегистрируйте команду dotnet для системы, выполнив команду snap alias:

sudo snap alias dotnet-runtime-50.dotnet dotnet

Эта команда имеет следующий формат: sudo snap alias {package}.{command} {alias}. Вы можете выбрать любое имя {alias}. Например, вы можете присвоить команде имя после установки конкретной версии с помощью Snap-пакета: sudo snap alias dotnet-runtime-50.dotnet dotnet50. При использовании команды dotnet50 вы вызываете эту конкретную версию .NET. Выбор другого псевдонима несовместим с инструкциями из большинства учебников и примеров, так как в них требуется команда dotnet.

Экспорт расположения установки

Переменная среды DOTNET_ROOT часто используется различными средствами для определения места установки .NET. При установке .NET с помощью snap-пакета эта переменная среды не настраивается. Вам нужно настроить переменную среды DOTNET_ROOT в своем профиле. Путь к snap-пакету использует следующий формат: /snap/{package}/current. Например, если вы установили snap-пакет dotnet-sdk, используйте следующую команду, чтобы задать для переменной среды место расположения .NET:

export DOTNET_ROOT=/snap/dotnet-sdk/current

Совет

Предыдущая команда export задает переменную среды только для сеанса терминала, в котором она была запущена.

Вы можете изменить профиль оболочки, чтобы добавить команды окончательно. Существует несколько различных оболочек, доступных для Linux, и каждая из них имеет свой профиль. Пример:

  • Оболочка Bash: ~/.bash_profile, ~/.bashrc
  • Оболочка Korn: ~/.kshrc или .profile
  • Оболочка Z: ~/.zshrc или .zprofile

Измените соответствующий исходный файл для своей оболочки и добавьте export DOTNET_ROOT=/snap/dotnet-sdk/current.

Ошибки сертификатов TLS/SSL

При установке .NET с помощью пакета Snap возможно, что на некоторых дистрибутивах нельзя найти сертификаты TLS/SSL .NET, а во время выполнения restore может отобразиться сообщение об ошибке:

Processing post-creation actions...
Running 'dotnet restore' on /home/myhome/test/test.csproj...
  Restoring packages for /home/myhome/test/test.csproj...
/snap/dotnet-sdk/27/sdk/2.2.103/NuGet.targets(114,5): error : Unable to load the service index for source https://api.nuget.org/v3/index.json. [/home/myhome/test/test.csproj]
/snap/dotnet-sdk/27/sdk/2.2.103/NuGet.targets(114,5): error :   The SSL connection could not be established, see inner exception. [/home/myhome/test/test.csproj]
/snap/dotnet-sdk/27/sdk/2.2.103/NuGet.targets(114,5): error :   The remote certificate is invalid according to the validation procedure. [/home/myhome/test/test.csproj]

Чтобы устранить эту проблему, задайте несколько переменных среды:

export SSL_CERT_FILE=[path-to-certificate-file]
export SSL_CERT_DIR=/dev/null

Расположение сертификата зависит от дистрибутива. Ниже приведены расположения для дистрибутивов, в которых возникла проблема.

Distribution Расположение
Fedora /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
OpenSUSE /etc/ssl/ca-bundle.pem
Solus /etc/ssl/certs/ca-certificates.crt

Дальнейшие действия