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:
- SDK-Resolver funktioniert nicht mit Snap-Installationen des SDK unter Linux
- Es war nicht möglich, installierte .NET SDKs zu finden
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.