Řešení chyb .NET souvisejících s chybějícími soubory v Linuxu
Když se pokusíte použít .NET v Linuxu, příkazy, jako dotnet new
je například a dotnet run
může selhat se zprávou související s nenalezeným souborem, například fxr, libhostfxr.sonebo FrameworkList.xml. Některé chybové zprávy se můžou podobat následujícím položkám:
System.IO.FileNotFoundException
System.IO.FileNotFoundException: Nelze najít soubor //usr/share/dotnetpacks/Microsoft.NETCore.App.Ref/5.0.0/data/FrameworkList.xml.
Došlo k závažné chybě.
Došlo k závažné chybě. Požadovanou knihovnu libhostfxr.so nelze najít.
nebo
Došlo k závažné chybě. Složka [//usr/share/dotnethost/fxr] neexistuje.
nebo
Došlo k závažné chybě, složka [//usr/share/dotnethost/fxr] neobsahuje žádné podřízené složky číslování verze.
Obecné zprávy o dotnet nenalezena
Může se zobrazit obecná zpráva, která značí, že sada SDK nebyla nalezena nebo že už je balíček nainstalovaný.
Jedním z příznaků těchto problémů je, že ve /usr/lib64/dotnet
vašem systému jsou obě složky i /usr/share/dotnet
složky.
Tip
dotnet --info
Pomocí příkazu zobrazte seznam nainstalovaných sad SDK a modulů runtime. Další informace naleznete v tématu Jak zkontrolovat, zda je .NET již nainstalován.
Co se děje
Důležité
Od .NET 9 (aktuálně ve verzi Preview) Microsoft publikuje balíčky pouze pro podporované distribuce Linuxu, které nepublikují vlastní balíčky. Další informace naleznete v tématu Instalace .NET v Linuxu.
K těmto chybám obvykle dochází, když dvě úložiště balíčků Linuxu poskytují balíčky .NET. I když Microsoft poskytuje úložiště balíčků pro Linux pro zdrojové balíčky .NET, některé distribuce Linuxu také poskytují balíčky .NET. Mezi tyto distribuce patří:
- Alpine Linux
- Oblouk
- CentOS Stream
- Fedora
- RHEL
- Ubuntu 22.04+
Pokud balíčky .NET kombinujete ze dvou různých zdrojů, pravděpodobně narazíte na problémy. Balíčky můžou umístit věci na různé cesty a můžou se zkompilovat jinak.
Řešení
Řešením těchto problémů je použití .NET z jednoho úložiště balíčků. Které úložiště můžete vybrat a jak ho provést, se liší podle případů použití a distribuce Linuxu.
- Distribuce Linuxu poskytuje balíčky .NET a chci je použít.
- Potřebuji verzi .NET, která není součástí distribuce Linuxu.
Distribuce Linuxu poskytuje balíčky .NET a chci je použít
Používáte úložiště Microsoftu pro jiné balíčky, jako je PowerShell a MSSQL?
Ano
Nakonfigurujte správce balíčků tak, aby ignoroval balíčky .NET z úložiště Microsoftu. Je možné, že jste nainstalovali .NET z obou úložišť, takže chcete zvolit jedno nebo druhé.
Odeberte existující balíčky .NET z vaší distribuce. Chcete začít znovu a ujistit se, že je neinstalujete z nesprávného úložiště.
sudo dnf remove 'dotnet*' 'aspnet*' 'netstandard*'
Nakonfigurujte úložiště Microsoftu tak, aby ignorovala balíčky .NET.
echo 'excludepkgs=dotnet*,aspnet*,netstandard*' | sudo tee -a /etc/yum.repos.d/microsoft-prod.repo
Přeinstalujte .NET z informačního kanálu balíčku distribuce. Další informace naleznete v tématu Instalace .NET v Linuxu.
Ne
Odeberte existující balíčky .NET z vaší distribuce. Chcete začít znovu a ujistit se, že je neinstalujete z nesprávného úložiště.
sudo dnf remove 'dotnet*' 'aspnet*' 'netstandard*'
Odstraňte informační kanál úložiště Microsoftu z distribuce.
sudo dnf remove packages-microsoft-prod
Přeinstalujte .NET z informačního kanálu balíčku distribuce. Další informace naleznete v tématu Instalace .NET v Linuxu.
Používáte úložiště Microsoftu pro jiné balíčky, jako je PowerShell a MSSQL?
Ano
Nakonfigurujte správce balíčků tak, aby ignoroval balíčky .NET z úložiště Microsoftu. Je možné, že jste nainstalovali .NET z obou úložišť, takže chcete zvolit jedno nebo druhé.
Odeberte existující balíčky .NET z vaší distribuce. Chcete začít znovu a ujistit se, že je neinstalujete z nesprávného úložiště.
sudo apt remove 'dotnet*' 'aspnet*' 'netstandard*'
Vytvořte
/etc/apt/preferences
, pokud ještě neexistuje.touch /etc/apt/preferences
Otevřete
/etc/apt/preferences
v editoru a přidejte následující nastavení, která brání balíčkům, které začínajídotnet
na ,aspnetcore
nebonetstandard
aby byly zdrojové z úložiště Microsoftu:Package: dotnet* aspnet* netstandard* Pin: origin "packages.microsoft.com" Pin-Priority: -10
Přeinstalujte .NET z informačního kanálu balíčku distribuce. Další informace naleznete v tématu Instalace .NET v Linuxu.
Ne
Odeberte existující balíčky .NET z vaší distribuce. Chcete začít znovu a ujistit se, že je neinstalujete z nesprávného úložiště.
sudo apt remove 'dotnet*' 'aspnet*' 'netstandard*'
Odstraňte informační kanál úložiště Microsoftu z distribuce.
sudo rm -f /etc/apt/sources.list.d/microsoft-prod.list sudo apt update
Přeinstalujte .NET z informačního kanálu balíčku distribuce. Další informace naleznete v tématu Instalace .NET v Linuxu.
Potřebuji verzi .NET, která není součástí distribuce Linuxu
Nakonfigurujte správce balíčků tak, aby ignoroval balíčky .NET z úložiště distribuce. Je možné, že jste nainstalovali .NET z obou úložišť, takže chcete zvolit jedno nebo druhé.
Odeberte existující balíčky .NET z vaší distribuce. Chcete začít znovu a ujistit se, že je neinstalujete z nesprávného úložiště.
sudo dnf remove 'dotnet*' 'aspnet*' 'netstandard*'
Nakonfigurujte úložiště Linux tak, aby ignorovala balíčky .NET.
echo 'excludepkgs=dotnet*,aspnet*,netstandard*' | sudo tee -a /etc/yum.repos.d/<your-package-source>.repo
Nezapomeňte nahradit
<your-package-source>
zdrojem balíčku vaší distribuce.Přeinstalujte .NET z informačního kanálu balíčku distribuce. Další informace naleznete v tématu Instalace .NET v Linuxu.
Nakonfigurujte správce balíčků tak, aby ignoroval balíčky .NET z úložiště distribuce. Je možné, že jste nainstalovali .NET z obou úložišť, takže chcete zvolit jedno nebo druhé.
Odeberte existující balíčky .NET z vaší distribuce. Chcete začít znovu a ujistit se, že je neinstalujete z nesprávného úložiště.
sudo apt remove 'dotnet*' 'aspnet*' 'netstandard*'
Vytvořte
/etc/apt/preferences
, pokud ještě neexistuje.touch /etc/apt/preferences
Otevřete
/etc/apt/preferences
v editoru a přidejte fragement předvoleb apt, abyste zabránili balíčkům, které začínajídotnet
,aspnetcore
nebonetstandard
aby byly zdrojové z úložiště distribuce.Package: dotnet* aspnet* netstandard* Pin: origin "<your-package-source>" Pin-Priority: -10
Nezapomeňte nahradit
<your-package-source>
zdrojem balíčku vaší distribuce.Vaše distribuce může mít více zdrojů balíčků.
Například v Ubuntu v USA možná budete muset použít jeden fragment pro
archive.ubuntu.com
a druhý prosecurity.ubuntu.com
. Jednotlivé fragmenty oddělte prázdným řádkem takto:Package: dotnet* aspnet* netstandard* Pin: origin "archive.ubuntu.com" Pin-Priority: -10 Package: dotnet* aspnet* netstandard* Pin: origin "security.ubuntu.com" Pin-Priority: -10
Tip
apt-cache policy
Pomocí příkazu vyhledejte zdroj:apt-cache policy '?name(dotnet.*)' | grep -v microsoft | grep '/ubuntu' | cut -d"/" -f3 | sort -u
Tip
Pokud jste zaregistrovali úložiště balíčků backportů Ubuntu .NET, měli byste zrušit registraci úložiště balíčků Ubuntu .NET backports místo konfigurace správce balíčků tak, aby ignorovala obsažené balíčky .NET. Jinak správce balíčků načte index balíčku z tohoto úložiště, aby ho ignoroval, protože úložiště obsahuje pouze balíčky .NET. Tím se efektivně zpomalí aktualizace místního indexu balíčků při každém volání
apt update
.apt-cache policy
Pomocí příkazu zkontrolujte, jestli jste zaregistrovali úložiště balíčků Ubuntu .NET backports:apt-cache policy '?name(dotnet.*)' | grep 'ppa.launchpadcontent.net/dotnet/backports' | sort -u
Přeinstalujte .NET z informačního kanálu balíčku Microsoftu. Další informace naleznete v tématu Instalace .NET v Linuxu. Pokud používáte Ubuntu, přečtěte si téma Moje distribuce Ubuntu neobsahuje požadovanou verzi .NET nebo potřebuji verzi .NET, která není podporována.
Online odkazy
Mnoho dalších uživatelů tyto problémy nahlásilo. Následuje seznam těchto problémů. Můžete si je projít a získat přehled o tom, co se může stát:
System.IO.FileNotFoundException a /usr//share/dotnetpack/Microsoft.NETCore.App.Ref/5.0.0/data/FrameworkList.xml.
- SDK č. 15785: Po upgradu na verzi 5.0.3 nejde sestavit úplně nový projekt
- SADA SDK č. 15863: Úloha MSB4018 ResolveTargetingPackAssets se neočekávaně nezdařila" po aktualizaci na 5.0.103
- SDK č. 17411: dotnet Sestavení vždy vyvolává chybu
- SDK č. 12075: dotnet 3.1.301 v Fedora 32 nelze najít FrameworkList.xml , protože neexistuje
Závažná chyba: libhostfxr.so Nepodařilo se najít
Závažná chyba: Složka /host/fxr neexistuje
Závažná chyba: Složka /host/fxr neobsahuje žádné podřízené složky číslování verze
Obecné chyby bez jasných zpráv
- Core #4605: Nejde spustitdotnet novou konzolu
- Core č. 4644: V Fedora 32 nejde nainstalovat sadu .NET Core SDK 2.1
- Modul runtime č. 49375: Po aktualizaci na verzi 5.0.200-1 pomocí správce balíčků se zdá, že nejsou nainstalovány žádné sady SDK.
- Instalační program č. 16438: Aplikace --version neexistuje