Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
När du försöker använda .NET på Linux kan kommandon som dotnet new och dotnet run misslyckas med ett meddelande som är relaterat till att en fil inte hittas, till exempel fxr, libhostfxr.soeller FrameworkList.xml. Vissa felmeddelanden kan likna följande:
- System.IO.FileNotFoundException - System.IO.FileNotFoundException: Det gick inte att hitta filen '/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/5.0.0/data/FrameworkList.xml'. 
- Ett allvarligt fel uppstod. - Ett allvarligt fel uppstod. Det gick inte att hitta det nödvändiga biblioteket libhostfxr.so . - eller - Ett allvarligt fel uppstod. Mappen [//usr/share/dotnethost/fxr] finns inte. - eller - Ett allvarligt fel uppstod, mappen [//usrshare//dotnethost/fxr] innehåller inga underordnade mappar med versionsnummer. 
- Allmänna meddelanden om dotnet hittades inte - Ett allmänt meddelande kan visas som anger att SDK inte hittas eller att paketet redan har installerats. 
Ett symptom på dessa problem är att både mapparna /usr/lib64/dotnet och /usr/share/dotnet finns i systemet.
Dricks
              dotnet --info Använd kommandot för att lista vilka SDK:er och Körningar som är installerade. Mer information finns i Så här kontrollerar du att .NET redan är installerat.
Vad är det som händer
Viktigt!
Från och med .NET 9 publicerar Microsoft endast paket för Linux-distributioner som stöds och som inte publicerar sina egna paket. Mer information finns i Installera .NET på Linux.
Dessa fel uppstår vanligtvis när två Linux-paketlagringsplatser tillhandahåller .NET-paket. Medan Microsoft tillhandahåller en Linux-paketlagringsplats för att hämta .NET-paket, tillhandahåller vissa Linux-distributioner även .NET-paket. Dessa distributioner omfattar:
- Alpine Linux
- Båge
- CentOS Stream
- Fedora
- RHEL (Red Hat Enterprise Linux)
- Ubuntu 22.04+
Om du blandar .NET-paket från två olika källor stöter du förmodligen på problem. Paketen kan placera saker på olika sökvägar och kan kompileras på olika sätt.
Lösningar
Lösningen på dessa problem är att använda .NET från en paketlagringsplats. Vilken lagringsplats som ska väljas och hur du gör det varierar beroende på användningsfall och Linux-distribution.
- Min Linux-distribution tillhandahåller .NET-paket och jag vill använda dem.
- Jag behöver en version av .NET som inte tillhandahålls av min Linux-distribution.
Min Linux-distribution tillhandahåller .NET-paket och jag vill använda dem
- Använder du Microsoft-lagringsplatsen för andra paket, till exempel PowerShell och MSSQL? - Ja - Konfigurera pakethanteraren för att ignorera .NET-paketen från Microsoft-lagringsplatsen. Det är möjligt att du har installerat .NET från båda lagringsplatserna, så du vill välja det ena eller det andra. - Ta bort befintliga .NET-paket från distributionen. Du vill börja om och se till att du inte installerar dem från fel lagringsplats. - sudo dnf remove 'dotnet*' 'aspnet*' 'netstandard*'
- Konfigurera Microsoft-lagringsplatsen för att ignorera .NET-paket. - echo 'excludepkgs=dotnet*,aspnet*,netstandard*' | sudo tee -a /etc/yum.repos.d/microsoft-prod.repo
- Installera om .NET från distributionens paketflöde. Mer information finns i Installera .NET på Linux. 
 
- Nej - Ta bort befintliga .NET-paket från distributionen. Du vill börja om och se till att du inte installerar dem från fel lagringsplats. - sudo dnf remove 'dotnet*' 'aspnet*' 'netstandard*'
- Ta bort Microsoft-lagringsplatsens feed från din distribution. - sudo dnf remove packages-microsoft-prod
- Installera om .NET från distributionens paketflöde. Mer information finns i Installera .NET på Linux. 
 
 
- Använder du Microsoft-lagringsplatsen för andra paket, till exempel PowerShell och MSSQL? - Ja - Konfigurera pakethanteraren för att ignorera .NET-paketen från Microsoft-lagringsplatsen. Det är möjligt att du har installerat .NET från båda lagringsplatserna, så du vill välja det ena eller det andra. - Ta bort befintliga .NET-paket från distributionen. Du vill börja om och se till att du inte installerar dem från fel lagringsplats. - sudo apt remove 'dotnet*' 'aspnet*' 'netstandard*'
- Skapa - /etc/apt/preferences, om det inte redan finns.- touch /etc/apt/preferences
- Öppna - /etc/apt/preferencesi ett redigeringsprogram och lägg till följande inställningar, vilket förhindrar att paket som börjar med- dotnet,- aspnetcoreeller- netstandardhämtas från Microsoft-lagringsplatsen:- Package: dotnet* aspnet* netstandard* Pin: origin "packages.microsoft.com" Pin-Priority: -10
- Installera om .NET från distributionens paketflöde. Mer information finns i Installera .NET på Linux. 
 
- Nej - Ta bort befintliga .NET-paket från distributionen. Du vill börja om och se till att du inte installerar dem från fel lagringsplats. - sudo apt remove 'dotnet*' 'aspnet*' 'netstandard*'
- Ta bort Microsoft-lagringsplatsens feed från din distribution. - sudo rm -f /etc/apt/sources.list.d/microsoft-prod.list sudo apt update
- Installera om .NET från distributionens paketflöde. Mer information finns i Installera .NET på Linux. 
 
 
Jag behöver en version av .NET som inte tillhandahålls av min Linux-distribution
Konfigurera pakethanteraren för att ignorera .NET-paketen från distributionens lagringsplats. Det är möjligt att du har installerat .NET från båda lagringsplatserna, så du vill välja det ena eller det andra.
- Ta bort befintliga .NET-paket från distributionen. Du vill börja om och se till att du inte installerar dem från fel lagringsplats. - sudo dnf remove 'dotnet*' 'aspnet*' 'netstandard*'
- Konfigurera Linux-lagringsplatsen för att ignorera .NET-paket. - echo 'excludepkgs=dotnet*,aspnet*,netstandard*' | sudo tee -a /etc/yum.repos.d/<your-package-source>.repo- Ersätt - <your-package-source>med distributionens paketkälla.
- Installera om .NET från distributionens paketflöde. Mer information finns i Installera .NET på Linux. 
Konfigurera pakethanteraren för att ignorera .NET-paketen från distributionens lagringsplats. Det är möjligt att du har installerat .NET från båda lagringsplatserna, så du vill välja det ena eller det andra.
- Ta bort befintliga .NET-paket från distributionen. Du vill börja om och se till att du inte installerar dem från fel lagringsplats. - sudo apt remove 'dotnet*' 'aspnet*' 'netstandard*'
- Skapa - /etc/apt/preferences, om det inte redan finns.- touch /etc/apt/preferences
- Öppna - /etc/apt/preferencesi en redigerare och lägg till ett fragment med apt-inställningar för att förhindra att paket som börjar med- dotnet,- aspnetcoreeller- netstandardhämtas från distributionens lagringsplats.- Package: dotnet* aspnet* netstandard* Pin: origin "<your-package-source>" Pin-Priority: -10- Ersätt - <your-package-source>med distributionens paketkälla.- Distributionen kan ha mer än en paketkälla. - På Ubuntu i USA kan du till exempel behöva använda ett fragment för - archive.ubuntu.comoch ett annat för- security.ubuntu.com. Avgränsa varje fragment med en tom rad så här:- Package: dotnet* aspnet* netstandard* Pin: origin "archive.ubuntu.com" Pin-Priority: -10 Package: dotnet* aspnet* netstandard* Pin: origin "security.ubuntu.com" Pin-Priority: -10- Dricks - apt-cache policyAnvänd kommandot för att hitta källan:- apt-cache policy '?name(dotnet.*)' | grep -v microsoft | grep '/ubuntu' | cut -d"/" -f3 | sort -u- Dricks - Om du har registrerat paketlagringsplatsen Ubuntu .NET-backports bör du avregistrera Ubuntu .NET-lagringsplatsen för .NET-backports i stället för att konfigurera pakethanteraren för att ignorera de inneslutna .NET-paketen. Annars hämtar pakethanteraren paketindexet från den här lagringsplatsen, bara för att ignorera det, eftersom lagringsplatsen bara innehåller .NET-paket. Detta gör det effektivt långsammare att uppdatera ditt lokala paketindex varje gång du anropar - apt update.- apt-cache policyAnvänd kommandot för att kontrollera om du har registrerat Ubuntu .NET-lagringsplatsen för backports-paketet:- apt-cache policy '?name(dotnet.*)' | grep 'ppa.launchpadcontent.net/dotnet/backports' | sort -u
- Installera om .NET från Microsoft-paketflödet. Mer information finns i Installera .NET på Linux. Om du använder Ubuntu läser du Min Ubuntu-distribution innehåller inte den .NET-version jag vill ha, eller så behöver jag en .NET-version som inte stöds. 
Onlinereferenser
Många andra användare har rapporterat dessa problem. Följande är en lista över dessa problem. Du kan läsa igenom dem för att få insikter om vad som kan hända:
- System.IO.FileNotFoundException och "/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/5.0.0/data/FrameworkList.xml" - SDK #15785: Det går inte att skapa ett helt nytt projekt efter uppgraderingen till 5.0.3
- SDK #15863: "MSB4018 ResolveTargetingPackAssets-uppgift misslyckades oväntat" efter uppdatering till 5.0.103
- SDK #17411: dotnet kompilering genererar alltid fel
- SDK #12075: dotnet 3.1.301 på Fedora 32 kan inte hitta FrameworkList.xml eftersom den inte finns
 
- Allvarligt fel: libhostfxr.so det gick inte att hitta 
- Allvarligt fel: mappen /host/fxr finns inte 
- Allvarligt fel: mappen /värden/fxr innehåller inga underordnade mappar med versionsnummer 
- Allmänna fel utan tydliga meddelanden - Core #4605: kan inte köra "dotnet ny konsol"
- Core #4644: Det går inte att installera .NET Core SDK 2.1 på Fedora 32
- Runtime #49375: När du har uppdaterat till 5.0.200-1 med pakethanteraren verkar det som om inga sdk:er har installerats
- Installationsprogrammet #16438: Programmet "--version" finns inte