Ř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

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

  • 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 informačního kanálu balíčku distribuce. 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 informační kanál úložiště Microsoftu z distribuce.

        sudo dnf remove packages-microsoft-prod
        
      3. 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é.

      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 informačního kanálu balíčku distribuce. 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 informační kanál úložiště Microsoftu z distribuce.

        sudo rm -f /etc/apt/sources.list.d/microsoft-prod.list
        sudo apt update
        
      3. 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é.

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

  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 fragement předvoleb apt, abyste zabránili balíčkům, které začínají dotnet, aspnetcorenebo netstandard 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ý 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
    

    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
    
  4. 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:

Viz také