Hiányzó linuxos fájlokhoz kapcsolódó .NET-hibák elhárítása
Amikor a .NET-et Linuxon próbálja használni, a parancsok, például dotnet new
dotnet run
sikertelenek lehetnek, ha nem található egy fájlhoz kapcsolódó üzenet, például fxr: , libhostfxr.sovagy FrameworkList.xml. A hibaüzenetek némelyike hasonló lehet a következő elemekhez:
System.IO.FileNotFoundException
System.IO.FileNotFoundException: Nem található a következő fájl: "/usr//share/dotnetpacks/Microsoft.NETCore.App.Ref/5.0.0/data/FrameworkList.xml".
Végzetes hiba történt.
Végzetes hiba történt. A szükséges kódtár libhostfxr.so nem található.
vagy
Végzetes hiba történt. A[//usr/share/dotnethost/fxr] mappa nem létezik.
vagy
Végzetes hiba történt, a[//usr/share/dotnethost/fxr] mappa nem tartalmaz verziószámozott gyermekmappákat.
Általános üzenetek a nem található üzenetekről dotnet
Megjelenhet egy általános üzenet, amely azt jelzi, hogy az SDK nem található, vagy hogy a csomag már telepítve van.
Ezeknek a problémáknak az egyik tünete, hogy a mappák és /usr/share/dotnet
a /usr/lib64/dotnet
mappák is a rendszeren vannak.
Tipp.
dotnet --info
A paranccsal listázhatja, hogy mely SDK-k és futtatókörnyezetek vannak telepítve. További információ: Hogyan ellenőrizheti, hogy a .NET már telepítve van-e.
Mi történik
Fontos
A .NET 9-től kezdve (jelenleg előzetes verzióban) a Microsoft csak olyan támogatott Linux-disztribúciókhoz tesz közzé csomagokat, amelyek nem teszik közzé saját csomagjukat. További információ: .NET telepítése Linuxon.
Ezek a hibák általában akkor fordulnak elő, ha két Linux-csomagtár biztosítja a .NET-csomagokat. Bár a Microsoft linuxos csomagtárházat biztosít a .NET-csomagok forrásához, egyes Linux-disztribúciók .NET-csomagokat is biztosítanak. Ezek a disztribúciók a következők:
- Alpine Linux
- Boltív
- CentOS Stream
- Fedora
- RHEL
- Ubuntu 22.04+
Ha két különböző forrásból származó .NET-csomagokat kever, valószínűleg problémákba ütközik. A csomagok különböző útvonalakon helyezhetik el a dolgokat, és másképpen fordíthatók le.
Megoldások
Ezekre a problémákra a megoldás a .NET használata egy csomagtárházból. A kiválasztandó adattár és annak menete használati esettől és Linux-disztribúciótól függően változik.
- A Linux-disztribúcióm .NET-csomagokat biztosít, és használni szeretném őket.
- Olyan .NET-verzióra van szükségem, amelyet nem a Linux-disztribúcióm biztosít.
A Linux-disztribúcióm .NET-csomagokat biztosít, és használni szeretném őket
Használja a Microsoft-adattárat más csomagokhoz, például a PowerShellhez és az MSSQL-hez?
Igen
Konfigurálja a csomagkezelőt úgy, hogy figyelmen kívül hagyja a Microsoft-adattárból származó .NET-csomagokat. Lehetséges, hogy mindkét adattárból telepítette a .NET-et, ezért az egyiket vagy a másikat szeretné választani.
Távolítsa el a meglévő .NET-csomagokat a disztribúcióból. Újra szeretné kezdeni, és győződjön meg arról, hogy nem a megfelelő adattárból telepíti őket.
sudo dnf remove 'dotnet*' 'aspnet*' 'netstandard*'
Konfigurálja a Microsoft-adattárat úgy, hogy figyelmen kívül hagyja a .NET-csomagokat.
echo 'excludepkgs=dotnet*,aspnet*,netstandard*' | sudo tee -a /etc/yum.repos.d/microsoft-prod.repo
Telepítse újra a .NET-et a disztribúció csomagcsatornájából. További információ: .NET telepítése Linuxon.
Nem
Távolítsa el a meglévő .NET-csomagokat a disztribúcióból. Újra szeretné kezdeni, és győződjön meg arról, hogy nem a megfelelő adattárból telepíti őket.
sudo dnf remove 'dotnet*' 'aspnet*' 'netstandard*'
Törölje a Microsoft-adattár hírcsatornáját a disztribúcióból.
sudo dnf remove packages-microsoft-prod
Telepítse újra a .NET-et a disztribúció csomagcsatornájából. További információ: .NET telepítése Linuxon.
Használja a Microsoft-adattárat más csomagokhoz, például a PowerShellhez és az MSSQL-hez?
Igen
Konfigurálja a csomagkezelőt úgy, hogy figyelmen kívül hagyja a Microsoft-adattárból származó .NET-csomagokat. Lehetséges, hogy mindkét adattárból telepítette a .NET-et, ezért az egyiket vagy a másikat szeretné választani.
Távolítsa el a meglévő .NET-csomagokat a disztribúcióból. Újra szeretné kezdeni, és győződjön meg arról, hogy nem a megfelelő adattárból telepíti őket.
sudo apt remove 'dotnet*' 'aspnet*' 'netstandard*'
Létrehozás
/etc/apt/preferences
, ha még nem létezik.touch /etc/apt/preferences
Nyisson meg
/etc/apt/preferences
egy szerkesztőben, és adja hozzá a következő beállításokat, amelyek megakadályozzák, hogy a Microsoft-adattárból származó vagynetstandard
azzal kezdődődotnet
aspnetcore
csomagok származnak:Package: dotnet* aspnet* netstandard* Pin: origin "packages.microsoft.com" Pin-Priority: -10
Telepítse újra a .NET-et a disztribúció csomagcsatornájából. További információ: .NET telepítése Linuxon.
Nem
Távolítsa el a meglévő .NET-csomagokat a disztribúcióból. Újra szeretné kezdeni, és győződjön meg arról, hogy nem a megfelelő adattárból telepíti őket.
sudo apt remove 'dotnet*' 'aspnet*' 'netstandard*'
Törölje a Microsoft-adattár hírcsatornáját a disztribúcióból.
sudo rm -f /etc/apt/sources.list.d/microsoft-prod.list sudo apt update
Telepítse újra a .NET-et a disztribúció csomagcsatornájából. További információ: .NET telepítése Linuxon.
Olyan .NET-verzióra van szükségem, amelyet nem a Linux-disztribúcióm biztosít
Konfigurálja a csomagkezelőt úgy, hogy figyelmen kívül hagyja a .NET-csomagokat a terjesztési adattárból. Lehetséges, hogy mindkét adattárból telepítette a .NET-et, ezért az egyiket vagy a másikat szeretné választani.
Távolítsa el a meglévő .NET-csomagokat a disztribúcióból. Újra szeretné kezdeni, és győződjön meg arról, hogy nem a megfelelő adattárból telepíti őket.
sudo dnf remove 'dotnet*' 'aspnet*' 'netstandard*'
Konfigurálja a Linux-adattárat úgy, hogy figyelmen kívül hagyja a .NET-csomagokat.
echo 'excludepkgs=dotnet*,aspnet*,netstandard*' | sudo tee -a /etc/yum.repos.d/<your-package-source>.repo
Mindenképpen cserélje le
<your-package-source>
a terjesztési csomag forrását.Telepítse újra a .NET-et a disztribúció csomagcsatornájából. További információ: .NET telepítése Linuxon.
Konfigurálja a csomagkezelőt úgy, hogy figyelmen kívül hagyja a .NET-csomagokat a terjesztési adattárból. Lehetséges, hogy mindkét adattárból telepítette a .NET-et, ezért az egyiket vagy a másikat szeretné választani.
Távolítsa el a meglévő .NET-csomagokat a disztribúcióból. Újra szeretné kezdeni, és győződjön meg arról, hogy nem a megfelelő adattárból telepíti őket.
sudo apt remove 'dotnet*' 'aspnet*' 'netstandard*'
Létrehozás
/etc/apt/preferences
, ha még nem létezik.touch /etc/apt/preferences
Nyisson meg
/etc/apt/preferences
egy szerkesztőben, és adjon hozzá egy apt preferences fragementet, amely megakadályozza, hogy azok a csomagok, amelyek a disztribúció adattárából indulnak kidotnet
aspnetcore
, vagynetstandard
forrásként szerepeljenek.Package: dotnet* aspnet* netstandard* Pin: origin "<your-package-source>" Pin-Priority: -10
Mindenképpen cserélje le
<your-package-source>
a terjesztési csomag forrását.Előfordulhat, hogy a disztribúció több csomagforrással is rendelkezik.
Például az USA-beli Ubuntu esetében előfordulhat, hogy az egyik töredékhez
archive.ubuntu.com
, a másikhoz pedig asecurity.ubuntu.com
. Különítse el az egyes töredékeket a következőhöz hasonló üres vonallal:Package: dotnet* aspnet* netstandard* Pin: origin "archive.ubuntu.com" Pin-Priority: -10 Package: dotnet* aspnet* netstandard* Pin: origin "security.ubuntu.com" Pin-Priority: -10
Tipp.
A forrás megkereséséhez használja a
apt-cache policy
parancsot:apt-cache policy '?name(dotnet.*)' | grep -v microsoft | grep '/ubuntu' | cut -d"/" -f3 | sort -u
Tipp.
Ha regisztrálta az Ubuntu .NET backports csomagtárat , akkor a csomagkezelő konfigurálása helyett törölje az Ubuntu .NET backports csomagtárház regisztrációját ahelyett, hogy a csomagkezelőt úgy konfigurálná, hogy figyelmen kívül hagyja a tartalmazott .NET-csomagokat. Ellenkező esetben a csomagkezelő lekéri a csomagindexet ebből az adattárból, csak azért, hogy figyelmen kívül hagyja, mert az adattár csak .NET-csomagokat tartalmaz. Ez gyakorlatilag lelassítja a helyi csomagindex frissítését minden híváskor
apt update
.apt-cache policy
A paranccsal ellenőrizze, hogy regisztrálta-e az Ubuntu .NET backports csomagtárat:apt-cache policy '?name(dotnet.*)' | grep 'ppa.launchpadcontent.net/dotnet/backports' | sort -u
Telepítse újra a .NET-et a Microsoft csomagcsatornájából. További információ: .NET telepítése Linuxon. Ha Ubuntu-t használ, olvassa el az Ubuntu-disztribúció nem tartalmazza a kívánt .NET-verziót, vagy egy nem támogatott .NET-verzióra van szükségem.
Online hivatkozások
Sok más felhasználó jelentette ezeket a problémákat. Az alábbiakban felsoroljuk ezeket a problémákat. A következő információkból megtudhatja, hogy mi történhet:
System.IO.FileNotFoundExceptionés "/usr//dotnetshare/packs/Microsoft.NETCore.App.Ref/5.0.0/data/FrameworkList.xml"
- SDK #15785: nem lehet teljesen új projektet létrehozni az 5.0.3-ra való frissítés után
- SDK #15863: "MSB4018 ResolveTargetingPackAssets feladat váratlanul meghiúsult" az 5.0.103-ra való frissítés után
- SDK #17411: dotnet a build mindig hibát jelez
- SDK #12075: dotnet 3.1.301 a Fedora 32-n nem található FrameworkList.xml , mert nem létezik
Végzetes hiba: libhostfxr.so nem található
Végzetes hiba: a mappa /host/fxr nem létezik
Végzetes hiba: a /host/fxr mappa nem tartalmaz verziószámozott gyermekmappákat
Általános hibák egyértelmű üzenetek nélkül