Condividi tramite


Installare .NET SDK con Snap

Questo articolo descrive come installare il pacchetto Snap di .NET SDK. I pacchetti Snap di .NET SDK vengono forniti e gestiti da Canonical. I pacchetti Snap rappresentano un'ottima alternativa allo strumento di gestione pacchetti integrato nella distribuzione Linux.

Un pacchetto Snap è un bundle composto da un'app e dalle relative dipendenze che funziona in molte distribuzioni Linux diverse. I pacchetti Snap possono essere reperiti e installati dallo Snap Store. Per altre informazioni su Snap, vedere Introduzione a Snap.

Attenzione

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

È noto che il comando dotnet watch non funziona quando si installa .NET tramite Snap.

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

Prerequisiti

  • Distribuzione Linux che supporta Snap.
  • snapd il daemon Snap.

La distribuzione Linux in uso potrebbe già includere Snap. Provare a eseguire snap da un terminale per verificare se il comando funziona. Per un elenco delle distribuzioni Linux supportate e istruzioni su come installare Snap, vedere Installazione di snapd.

Versioni di .NET

Microsoft pubblica .NET in due diversi criteri di supporto, LTS (supporto a lungo termine) e STS (supporto a termine standard). La qualità di tutte le versioni è identica. L'unica differenza consiste nella lunghezza del supporto. Le versioni LTS ottengono il supporto gratuito e patch per tre anni. Le versioni STS ottengono supporto gratuito e patch per 18 mesi. Per altre informazioni, vedere i criteri di supporto .NET.

Le versioni di .NET attualmente supportate da Microsoft sono:

  • 8.0 (LTS) - Il supporto termina il 10 novembre 2026.
  • 6.0 (LTS) - Il supporto termina il 12 novembre 2024.

Altre entità che compilano e rilasciano .NET possono introdurre criteri di supporto diversi. Verificare presso queste entità per comprendere come è supportato .NET.

1. Installare l'SDK

I pacchetti Snap per .NET SDK sono tutti pubblicati con lo stesso identificatore: dotnet-sdk. È possibile installare una particolare versione dell'SDK specificando il canale. L'SDK include sia il runtime di ASP.NET Core che il runtime di .NET, con la versione idonea per l'SDK.

Suggerimento

La pagina del pacchetto .NET SDK Snapcraft include istruzioni specifiche per la distribuzione su come installare Snapcraft e .NET.

  1. Aprire un terminale.

  2. Usare snap install per installare il pacchetto Snap di .NET SDK. Ad esempio, il comando seguente installa il canale latest/stable, quello predefinito.

    sudo snap install dotnet-sdk --classic
    
    • Il parametro --classic è obbligatorio.
    • Usare il parametro --channel per specificare la versione da installare. Se questo parametro viene omesso, viene usato latest/stable. Ad esempio, --channel 8.0/stable installa .NET SDK 8.0.

L'alias di Snap dotnet viene creato e mappato automaticamente al comando dotnet del pacchetto Snap.

La tabella seguente contiene un elenco dei canali per i pacchetti che è possibile installare:

Versione di .NET Canale del pacchetto Snap
8 (LTS) 8.0/stable
latest/stable
lts/stable
7 7.0/stable (non più supportato)
6 (LTS) 6.0/stable
5 5.0/stable (non più supportato)
3.1 3.1/stable (non più supportato)
2.1 2.1/stable (non più supportato)

2. Esportare il percorso di installazione

La variabile di ambiente DOTNET_ROOT 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 proprio profilo. Il percorso del pacchetto Snap è nel formato seguente: /snap/{package}/current.

export DOTNET_ROOT=/snap/dotnet-sdk/current

Esportare la variabile di ambiente in modo permanente

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

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

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

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

3. Usare l'interfaccia della riga di comando di .NET

Aprire un terminale e digitare dotnet.

dotnet

Verrà visualizzato l'output seguente:

Usage: dotnet [options]
Usage: dotnet [path-to-application]

Options:
  -h|--help         Display help.
  --info            Display .NET information.
  --list-sdks       Display the installed SDKs.
  --list-runtimes   Display the installed runtimes.

path-to-application:
  The path to an application .dll file to execute.

Per informazioni su come usare l'interfaccia della riga di comando di .NET, vedere Panoramica dell'interfaccia della riga di comando di .NET.

Risoluzione dei problemi

Il comando del terminale dotnet non funziona

I pacchetti Snap possono eseguire il mapping di un alias a un comando fornito dal pacchetto. Per impostazione predefinita, i pacchetti Snap di .NET SDK creano un alias per il comando dotnet. Se l'alias non è stato creato o è stato precedentemente rimosso, il comando seguente mostra come eseguire il mapping dell'alias:

sudo snap alias dotnet-sdk.dotnet dotnet

Non è possibile installare Snap in WSL2

systemd deve essere abilitato nell'istanza di WSL2 prima di poter installare Snap.

  1. Aprire /etc/wsl.conf in un editor di testo di propria scelta.

  2. Incollare la configurazione seguente:

    [boot]
    systemd=true
    
  3. Salvare il file e riavviare l'istanza di WSL2 tramite PowerShell. Usare il comando wsl.exe --shutdown.

Non è possibile risolvere il comando dotnet o l'SDK

È normale che altre app, ad esempio un'IDE di codice o un'estensione in Visual Studio Code, provino a risolvere il percorso di .NET SDK. In genere, l'individuazione viene eseguita controllando la variabile di ambiente DOTNET_ROOT o scoprendo dove si trova il file eseguibile dotnet. Un SDK .NET installato tramite Snap può creare confusione in queste app. Quando queste app non riescono a risolvere .NET SDK, viene visualizzato un messaggio di errore simile a uno dei seguenti:

  • L'SDK "Microsoft.NET.Sdk'' specificato non è stato trovato
  • L'SDK "Microsoft.NET.Sdk.Web'' specificato non è stato trovato
  • L'SDK "Microsoft.NET.Sdk.Razor'' specificato non è stato trovato

Per risolvere il problema, provare i passaggi seguenti:

  1. Assicurarsi di esportare in modo permanente la variabile di ambiente DOTNET_ROOT.

  2. Provare a creare un collegamento simbolico dell'eseguibile Snap dotnet al percorso che il programma sta cercando.

    Due percorsi comuni cercati dal comando dotnet sono:

    • /usr/local/bin/dotnet
    • /usr/share/dotnet

    Usare il comando seguente per creare un collegamento simbolico al pacchetto Snap:

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

Errori del certificato TLS/SSL

Quando .NET viene installato tramite Snap, è possibile che in alcune distribuzioni i certificati TLS/SSL di .NET non vengano trovati e che venga visualizzato un errore l'esecuzione di 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 i percorsi per le distribuzioni in cui è stato riscontrato il problema:

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