Installieren des .NET SDK oder der .NET-Runtime mithilfe von Snap

Verwenden Sie ein Snap-Paket, um das .NET SDK oder die .NET-Runtime zu installieren. Snaps stellen eine gute Alternative zum in Ihre Linux-Distribution integrierten Paket-Manager dar. In diesem Artikel wird beschrieben, wie Sie .NET mithilfe von Snap installieren.

Ein Snap ist ein Bündel aus einer Anwendung und ihren Abhängigkeiten, das ohne Änderungen in vielen verschiedenen Linux-Distributionen funktioniert. Snaps sind über den Snap Store abrufbar und installierbar. Weitere Informationen zu Snap finden Sie unter Erste Schritte mit Snap.

Wichtig

Snap-Pakete werden in WSL2 unter Windows nicht unterstützt. Verwenden Sie alternativ das dotnet-install-Skript oder den Paket-Manager für die jeweilige WSL2-Distribution. Es ist nicht empfehlenswert, jedoch können Sie versuchen, Snap mit einer nicht unterstützten Problemumgehung aus den Snapcraft-Foren zu aktivieren.

Achtung

Snap-Installationen von .NET können Probleme beim Ausführen von .NET-Tools haben. Wenn Sie .NET-Tools verwenden möchten, empfiehlt es sich, .NET mit dem dotnet-install Skript oder dem Paket-Manager für die jeweilige Linux-Distribution zu installieren.

Es ist ein bekanntes Problem, dass der dotnet watch Befehl nicht funktioniert, wenn .NET über Snap installiert wird.

Wenn Sie .NET-Tools oder den dotnet watch Befehl verwenden möchten, empfiehlt es sich, .NET mithilfe des dotnet-install Skripts zu installieren.

.NET-Releases

Es gibt zwei Arten von unterstützten Releases: LTS (Long Term Support) oder STS (Standard Term Support). Die Qualität aller Releases ist gleich. Der einzige Unterschied ist die Dauer des Supports. LTS-Releases erhalten für 3 Jahre kostenlosen Support und Patches. STS-Releases erhalten für 18 Monate kostenlosen Support und Patches. Weitere Informationen finden Sie in der .NET-Supportrichtlinie.

In der folgenden Tabelle ist der Supportstatus der einzelnen Versionen von .NET (und .NET Core) aufgeführt:

✔️ Unterstützt ❌ Nicht unterstützt
7 (STS) 5
6 (LTS) 3.1
3.0
2.2
2.1
2.0
1.1
1.0

SDK oder Runtime

Installieren Sie das SDK (das die Runtime enthält), wenn Sie .NET Core-Apps entwickeln möchten. Wenn Sie Apps nur ausführen möchten, installieren Sie die Runtime. Wenn Sie die Runtime installieren, wird die Installation der ASP.NET Core-Runtime empfohlen, da diese sowohl .NET- als auch ASP.NET Core-Runtimes umfasst.

Verwenden Sie die dotnet --list-sdks Befehle und dotnet --list-runtimes , um zu sehen, welche Versionen installiert sind. Weitere Informationen finden Sie unter Überprüfen, ob .NET Core bereits installiert ist.

Installieren des SDK

Snap-Pakete für das .NET SDK werden alle unter demselben Bezeichner veröffentlicht: dotnet-sdk. Eine bestimmte Version des SDK kann durch Angabe des Kanals installiert werden. Das SDK enthält die entsprechende Runtime. In der folgenden Tabelle sind die Kanäle aufgeführt:

.NET-Version Snap-Paket oder -Kanal
7 (STS) 7.0 oder latest/stable
6 (LTS) 6.0 oder lts/stable

Verwenden Sie den Befehl snap install, um ein Snap-Paket für das .NET SDK zu installieren. Geben Sie mit dem Parameter --channel an, welche Version installiert werden soll. Bei Weglassen dieses Parameters wird latest/stable verwendet. In diesem Beispiel ist 7.0 angegeben:

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

Registrieren Sie als Nächstes den Befehl dotnet für das System mit dem Befehl snap alias:

sudo snap alias dotnet-sdk.dotnet dotnet

Dieser Befehl ist wie folgt formatiert: sudo snap alias {package}.{command} {alias}. Sie können für {alias} einen beliebigen Namen auswählen. Beispielsweise können Sie den Befehl nach der spezifischen Version benennen, die mittels Snap installiert wurde: sudo snap alias dotnet-sdk.dotnet dotnet70. Beim Verwenden des Befehls dotnet70 rufen Sie diese spezifische Version von .NET auf. Die Auswahl eines anderen Alias ist jedoch mit den meisten Tutorials und Beispielen unvereinbar, da erwartet wird, dass ein dotnet-Befehl verwendet wird.

Installieren der Runtime

Snap-Pakete für die .NET-Runtime werden mit jeweils eigenem Paketbezeichner veröffentlicht. In der folgenden Tabelle sind die Paketbezeichner aufgeführt:

.NET-Version Snap-Paket
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

Verwenden Sie den Befehl snap install, um ein Snap-Paket für die .NET-Runtime zu installieren. In diesem Beispiel wird .NET 7 installiert:

sudo snap install dotnet-runtime-70 --classic

Registrieren Sie als Nächstes den Befehl dotnet für das System mit dem Befehl snap alias:

sudo snap alias dotnet-runtime-70.dotnet dotnet

Der Befehl ist wie folgt formatiert: sudo snap alias {package}.{command} {alias}. Sie können für {alias} einen beliebigen Namen auswählen. Beispielsweise können Sie den Befehl nach der spezifischen Version benennen, die mittels Snap installiert wurde: sudo snap alias dotnet-runtime-70.dotnet dotnet70. Beim Verwenden des Befehls dotnet70 rufen Sie eine spezifische Version von .NET auf. Die Auswahl eines anderen Alias ist jedoch mit den meisten Tutorials und Beispielen unvereinbar, da erwartet wird, dass ein dotnet-Befehl verfügbar ist.

Exportieren des Installationspfads

Die DOTNET_ROOT-Umgebungsvariable wird häufig von Tools verwendet, um zu ermitteln, wo .NET installiert ist. Wenn .NET über Snap installiert wird, ist diese Umgebungsvariable nicht konfiguriert. Sie sollten die Umgebungsvariable DOTNET_ROOT in Ihrem Profil konfigurieren. Der Pfad zu Snap verwendet das folgende Format: /snap/{package}/current. Wenn Sie z. B. das dotnet-sdk-Snap installiert haben, verwenden Sie den folgenden Befehl, um die Umgebungsvariable auf den Speicherort von .NET festzulegen:

export DOTNET_ROOT=/snap/dotnet-sdk/current

Tipp

Der oben aufgeführte Befehl export legt nur die Umgebungsvariable für die Terminalsitzung fest, in der er ausgeführt wurde.

Sie können Ihr Shell-Profil bearbeiten, um diese Befehle dauerhaft hinzuzufügen. Für Linux sind verschiedene Shells verfügbar, die jeweils über ein anderes Profil verfügen. Zum Beispiel:

  • Bash-Shell: ~/.bash_profile, ~/.bashrc
  • Korn-Shell: ~/.kshrc oder .profile
  • Z-Shell: ~/.kshrc oder .profile

Bearbeiten Sie die geeignete Quelldatei für Ihre Shell, und fügen Sie export DOTNET_ROOT=/snap/dotnet-sdk/current hinzu.

TLS/SSL-Zertifikatfehler

Wenn .NET über Snap installiert wird, ist es möglich, dass bei einigen Distributionen die TLS/SSL-Zertifikate für .NET nicht gefunden werden und während restore eine Fehlermeldung angezeigt wird:

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]

Zum Lösen dieses Problems müssen Sie einige Umgebungsvariablen festlegen:

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

Der Speicherort des Zertifikats variiert je nach Distribution. Hier finden Sie die Speicherorte für die Distributionen, in denen das Problem aufgetreten ist.

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

Probleme beim Auflösen von „dotnet“

Es ist üblich, dass andere Apps (z. B. die OmniSharp-Erweiterung für Visual Studio Code) versuchen, den Speicherort des .NET SDK aufzulösen. In der Regel erfolgt dies durch Ermittlung des Speicherorts der ausführbaren dotnet-Datei. Ein Snap-installiertes .NET SDK kann diese Apps verwirren. Wenn diese Apps das .NET SDK nicht auflösen können, wird ein Fehler angezeigt, der einer der folgenden Meldungen ähnelt:

  • The SDK 'Microsoft.NET.Sdk' specified could not be found (Das angegebene SDK „Microsoft.NET.Sdk“ wurde nicht gefunden)
  • The SDK 'Microsoft.NET.Sdk.Web' specified could not be found (Das angegebene SDK „Microsoft.NET.Sdk.Web“ wurde nicht gefunden)
  • The SDK 'Microsoft.NET.Sdk.Razor' specified could not be found (Das angegebene SDK „Microsoft.NET.Sdk.Razor“ wurde nicht gefunden)

Um dieses Problem zu beheben, verknüpfen Sie die ausführbare dotnet-Snap-Datei mit dem Speicherort, den das Programm sucht. Zwei gängige Pfade, nach denen der Befehl dotnet sucht, sind /usr/local/bin/dotnet und /usr/share/dotnet. Verwenden Sie beispielsweise den folgenden Befehl, um das aktuelle .NET SDK-Snap-Paket zu verknüpfen:

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

Informationen zu diesen Problemen finden Sie auch in den folgenden GitHub-Themen:

Der „dotnet“-Alias

Wenn Sie den dotnet-Alias für das Snap-installierte .NET erstellt haben, liegt möglicherweise ein Konflikt vor. Verwenden Sie den Befehl snap unalias dotnet, um ihn zu entfernen, und fügen Sie ggf. einen anderen Alias hinzu.

Nächste Schritte