Sdílet prostřednictvím


Ř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 a dotnet run mohou selhat se zprávou o tom, že nebyl nalezen soubor, například fxr, libhostfxr.so nebo 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 fatální chybě, složka [/usr/share/dotnet/host/fxr] neobsahuje žádné podřízené složky s číslem verze.

  • Obecné zprávy o dotnet nenalezeny

    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.

Návod

Použijte příkaz dotnet --info k zobrazení seznamu nainstalovaných sad SDK a běhových prostředí. Další informace naleznete v tématu Jak zkontrolovat, zda je .NET již nainstalován.

Co se děje

Důležité

Od .NET 9 microsoft publikuje balíčky pouze pro podporované linuxové distribuce, 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
  • Plstěný klobouk
  • RHEL (Red Hat Enterprise Linux)
  • 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

  • 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é.

      1. 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*'
        
      2. 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
        
      3. Přeinstalujte .NET z distribučního balíčkového kanálu. Další informace naleznete v tématu Instalace .NET v Linuxu.

    • Ne

      1. 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*'
        
      2. Odstraňte repozitář Microsoftu z vašeho systému.

        sudo dnf remove packages-microsoft-prod
        
      3. Přeinstalujte .NET z distribučního balíčkového kanálu. 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é.

      1. 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*'
        
      2. Vytvořte /etc/apt/preferences, pokud ještě neexistuje.

        touch /etc/apt/preferences
        
      3. Otevřete /etc/apt/preferences v editoru a přidejte následující nastavení, která brání balíčkům, které začínají dotnetna , aspnetcorenebo netstandard aby byly zdrojové z úložiště Microsoftu:

        Package: dotnet* aspnet* netstandard*
        Pin: origin "packages.microsoft.com"
        Pin-Priority: -10
        
      4. Přeinstalujte .NET z distribučního balíčkového kanálu. Další informace naleznete v tématu Instalace .NET v Linuxu.

    • Ne

      1. 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*'
        
      2. Odstraňte repozitář Microsoftu z vašeho systému.

        sudo rm -f /etc/apt/sources.list.d/microsoft-prod.list
        sudo apt update
        
      3. Přeinstalujte .NET z distribučního balíčkového kanálu. 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é.

  1. 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*'
    
  2. 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.

  3. Přeinstalujte .NET z distribučního balíčkového kanálu. 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é.

  1. 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*'
    
  2. Vytvořte /etc/apt/preferences, pokud ještě neexistuje.

    touch /etc/apt/preferences
    
  3. Otevřete /etc/apt/preferences v editoru a přidejte apt fragment předvoleb, abyste zabránili balíčkům, které začínají na dotnet, aspnetcore nebo netstandard, aby byly používány 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ý pro security.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
    

    Návod

    apt-cache policy Pomocí příkazu vyhledejte zdroj:

    apt-cache policy '?name(dotnet.*)' | grep -v microsoft | grep '/ubuntu' | cut -d"/" -f3 | sort -u
    

    Návod

    Pokud jste zaregistrovali úložiště balíčků Ubuntu .NET backports, měli byste odregistrovat úložiště balíčků Ubuntu .NET backports místo konfigurace správce balíčků tak, aby ignoroval 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
    
  4. Přeinstalujte .NET z balíčkového kanálu 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:

Viz také