Megosztás a következőn keresztül:


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

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

      1. 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*'
        
      2. 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
        
      3. Telepítse újra a .NET-et a disztribúció csomagcsatornájából. További információ: .NET telepítése Linuxon.

    • Nem

      1. 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*'
        
      2. Törölje a Microsoft-adattár hírcsatornáját a disztribúcióból.

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

      1. 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*'
        
      2. Létrehozás /etc/apt/preferences, ha még nem létezik.

        touch /etc/apt/preferences
        
      3. 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ó vagy netstandard azzal kezdődő dotnetaspnetcorecsomagok származnak:

        Package: dotnet* aspnet* netstandard*
        Pin: origin "packages.microsoft.com"
        Pin-Priority: -10
        
      4. Telepítse újra a .NET-et a disztribúció csomagcsatornájából. További információ: .NET telepítése Linuxon.

    • Nem

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

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

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

  1. 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*'
    
  2. Létrehozás /etc/apt/preferences, ha még nem létezik.

    touch /etc/apt/preferences
    
  3. 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 kidotnetaspnetcore, vagy netstandard 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 a security.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
    
  4. 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:

Lásd még