Installare .NET SDK o .NET Runtime con Snap

Usare un pacchetto Snap per installare .NET SDK o .NET Runtime. Gli snap rappresentano un'ottima alternativa alla gestione pacchetti integrata nella distribuzione linux. Questo articolo descrive come installare .NET tramite Snap.

Uno snap è un bundle di un'app e le relative dipendenze che funzionano senza modifiche in molte distribuzioni Linux diverse. Gli snap sono individuabili e installabili dallo Snap Store. Per altre informazioni su Snap, vedere Introduzione a Snap.

Importante

I pacchetti snap non sono supportati in WSL2 in Windows. In alternativa, usare lo dotnet-install script o la gestione pacchetti per la distribuzione WSL2 specifica. Non è consigliabile, ma è possibile provare ad abilitare lo snap con una soluzione alternativa non supportata dai forum snapcraft.

Attenzione

Le installazioni snap di .NET potrebbero avere problemi durante l'esecuzione di strumenti .NET. Se si vogliono usare gli strumenti .NET, è consigliabile installare .NET usando lo dotnet-install script o lo strumento di gestione pacchetti per la distribuzione Linux specifica.

Si tratta di un problema noto che il dotnet watch comando non funziona quando .NET viene installato tramite Snap.

Se si intende usare gli strumenti .NET o il dotnet watch comando , è consigliabile installare .NET usando lo dotnet-install script .

Versioni di .NET

Esistono due tipi di versioni supportate, il supporto a lungo termine (LTS) o il supporto per termini standard. La qualità di tutte le versioni è la stessa. L'unica differenza è la lunghezza del supporto. Le versioni LTS ottengono il supporto gratuito e le patch per 3 anni. Le versioni del servizio token di sicurezza ottengono il supporto gratuito e le patch per 18 mesi. Per altre informazioni, vedere Criteri di supporto di .NET.

La tabella seguente elenca lo stato di supporto di ogni versione di .NET (e .NET Core):

✔️ Supportati ❌ Supportato
7 (STS) 5
6 (LTS) 3.1
3.0
2.2
2.1
2,0
1,1
1,0

SDK o runtime

Installare l'SDK (che include il runtime) se si vogliono sviluppare app .NET. In alternativa, se è sufficiente eseguire le app, installare il runtime. Se si installa il runtime, è consigliabile installare il runtime di ASP.NET Core perché include sia .NET che runtime ASP.NET Core.

Usare i dotnet --list-sdks comandi e dotnet --list-runtimes per visualizzare le versioni installate. Per altre informazioni, vedere Come verificare che .NET sia già installato.

Installare l'SDK

I pacchetti snap per .NET SDK sono tutti pubblicati con lo stesso identificatore: dotnet-sdk. È possibile installare una versione specifica dell'SDK specificando il canale. L'SDK include il runtime corrispondente. La tabella seguente elenca i canali:

Versione di .NET Pacchetto snap o canale
7 (STS) 7.0 o latest/stable
6 (LTS) 6.0 o lts/stable

Usare il snap install comando per installare un pacchetto snap .NET SDK. Usare il --channel parametro per indicare la versione da installare. Se questo parametro viene omesso, latest/stable viene utilizzato . In questo esempio 7.0 viene specificato:

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

Registrare quindi il dotnet comando per il sistema con il snap alias comando :

sudo snap alias dotnet-sdk.dotnet dotnet

Questo comando è formattato come : sudo snap alias {package}.{command} {alias}. È possibile scegliere qualsiasi {alias} nome desiderato. Ad esempio, è possibile denominare il comando dopo la versione specifica installata da snap: sudo snap alias dotnet-sdk.dotnet dotnet70. Quando si usa il comando dotnet70, si richiamerà questa versione specifica di .NET. Tuttavia, la scelta di un alias diverso non è compatibile con la maggior parte delle esercitazioni ed esempi perché si prevede che venga usato un dotnet comando.

Installare il runtime

I pacchetti snap per .NET Runtime vengono pubblicati in base al proprio identificatore del pacchetto. Nella tabella seguente sono elencati gli identificatori del pacchetto:

Versione di .NET Pacchetto snap
7 (STS) dotnet-runtime-70
6 (LTS) dotnet-runtime-60
5 dotnet-runtime-50
3.1 dotnet-runtime-31
3.0 dotnet-runtime-30
2.2 dotnet-runtime-22
2.1 dotnet-runtime-21

Usare il snap install comando per installare un pacchetto snap di runtime .NET. In questo esempio viene installato .NET 7:

sudo snap install dotnet-runtime-70 --classic

Registrare quindi il dotnet comando per il sistema con il snap alias comando :

sudo snap alias dotnet-runtime-70.dotnet dotnet

Il comando è formattato come : sudo snap alias {package}.{command} {alias}. È possibile scegliere qualsiasi {alias} nome desiderato. Ad esempio, è possibile denominare il comando dopo la versione specifica installata da snap: sudo snap alias dotnet-runtime-70.dotnet dotnet70. Quando si usa il comando dotnet70, si richiamerà una versione specifica di .NET. Tuttavia, la scelta di un alias diverso non è compatibile con la maggior parte delle esercitazioni ed esempi perché si prevede che un dotnet comando sia disponibile.

Esportare il percorso di installazione

La DOTNET_ROOT variabile di ambiente viene spesso usata dagli strumenti per determinare dove è installato .NET. Quando .NET viene installato tramite Snap, questa variabile di ambiente non è configurata. È necessario configurare la variabile di ambiente DOTNET_ROOT nel profilo. Il percorso dello snap usa il formato seguente: /snap/{package}/current. Ad esempio, se è stato installato lo dotnet-sdk snap, usare il comando seguente per impostare la variabile di ambiente su dove si trova .NET:

export DOTNET_ROOT=/snap/dotnet-sdk/current

Suggerimento

Il comando precedente export imposta solo la variabile di ambiente per la sessione del terminale in cui è stata eseguita.

È possibile modificare il profilo della shell per aggiungere in modo permanente i comandi. Sono disponibili diverse shell per Linux e ognuna ha un profilo diverso. Ad esempio:

  • Shell Bash: ~/.bash_profile, ~/.bashrc
  • Shell Korn: ~/.kshrc o .profile
  • Shell Z: ~/.zshrc o .zprofile

Modificare il file di origine appropriato per la shell e aggiungere export DOTNET_ROOT=/snap/dotnet-sdk/current.

Errori del certificato TLS/SSL

Quando .NET è installato tramite Snap, è possibile che in alcune distribuzioni i certificati TLS/SSL .NET non vengano trovati e si potrebbe ricevere un errore durante 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]

Per risolvere questo problema, impostare alcune variabili di ambiente:

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

Il percorso del certificato varia in base alla distribuzione. Ecco le posizioni per le distribuzioni in cui è stato riscontrato il problema.

Distribuzione Posizione
Fedora /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
OpenSUSE /etc/ssl/ca-bundle.pem
Solus /etc/ssl/certs/ca-certificates.crt

Problemi che risolvono dotnet

È comune per altre app, ad esempio l'estensione OmniSharp per Visual Studio Code, per provare a risolvere il percorso di .NET SDK. In genere, questa operazione viene eseguita individuando dove si trova l'eseguibile dotnet . Un SDK .NET installato con snap può confondere queste app. Quando queste app non possono risolvere .NET SDK, verrà visualizzato un errore simile a uno dei messaggi seguenti:

  • Impossibile trovare l'SDK 'Microsoft.NET.Sdk' specificato
  • Impossibile trovare l'SDK 'Microsoft.NET.Sdk.Web' specificato
  • Impossibile trovare l'SDK 'Microsoft.NET.Sdk.Razor' specificato

Per risolvere questo problema, collegare il file eseguibile di snap dotnet alla posizione in cui il programma sta cercando. Due percorsi comuni che il dotnet comando sta cercando sono /usr/local/bin/dotnet e /usr/share/dotnet. Ad esempio, per collegare il pacchetto di snap .NET SDK corrente, usare il comando seguente:

ln -s /snap/dotnet-sdk/current/dotnet /usr/local/bin/dotnet

È anche possibile esaminare questi problemi di GitHub per informazioni su questi problemi:

Alias dotnet

È possibile che, se è stato creato l'alias dotnet per .NET installato, si avrà un conflitto. Usare il snap unalias dotnet comando per rimuoverlo e quindi aggiungere un alias diverso se si vuole.

Passaggi successivi