Linux'ta eksik dosyalarla ilgili .NET hatalarını giderme

Linux üzerinde .NET kullanmaya çalıştığınızda, dotnet new ve dotnet run gibi komutlar, fxr, libhostfxr.so veya FrameworkList.xml gibi bir dosyanın bulunmamasıyla ilgili bir iletiyle başarısız olabilir. Hata iletilerinden bazıları aşağıdaki öğelere benzer olabilir:

  • System.IO.FileNotFoundException

    System.IO.FileNotFoundException: '///usr/sharedotnetpacks/Microsoft.NETCore.App.Ref/5.0.0/data/FrameworkList.xml' dosyası bulunamadı.

  • Önemli bir hata oluştu.

    Önemli bir hata oluştu. Gerekli kitaplık libhostfxr.so bulunamadı.

    veya

    Önemli bir hata oluştu. [///usrshare/dotnethost/fxr] klasörü yok.

    veya

    Önemli bir hata oluştu, [///usrshare/dotnethost/fxr] klasörü sürüm numaralı alt klasör içermiyor.

  • dotnet hakkında genel iletiler bulunamadı

    SDK'nın bulunamadığını veya paketin zaten yüklü olduğunu belirten genel bir ileti görüntülenebilir.

Bu sorunların bir belirtisi, hem /usr/lib64/dotnet hem de /usr/share/dotnet klasörlerinin sisteminizde bulunmasıdır.

Tavsiye

dotnet --info Hangi SDK'ların ve Çalışma Zamanlarının yüklendiğini listelemek için komutunu kullanın. Daha fazla bilgi için bkz .NET'in zaten yüklü olup olmadığını nasıl kontrol edileceği.

Ne oluyor

Önemli

.NET 9'dan başlayarak, Microsoft yalnızca kendi paketlerini yayımlamayen desteklenen Linux dağıtımları için paketler yayımlar. Daha fazla bilgi için bkz. Linux'a .NET yükleme.

Bu hatalar genellikle iki Linux paket deposu .NET paketleri sağladığında oluşur. Microsoft kaynak .NET paketleri için bir Linux paket deposu sağlarken, bazı Linux dağıtımları da .NET paketleri sağlar. Bu dağıtımlar şunlardır:

  • Alpine Linux
  • Kemer
  • CentOS Stream
  • Fedora
  • RHEL (Red Hat Enterprise Linux)
  • Ubuntu 22.04+

İki farklı kaynaktan .NET paketlerini karıştırırsanız büyük olasılıkla sorunlarla karşılaşırsınız. Paketler öğeleri farklı yollara yerleştirebilir ve farklı şekilde derlenebilir.

Çözümler

Bu sorunların çözümü, bir paket deposundan .NET kullanmaktır. Hangi deponun seçildiği ve nasıl kullanılacağı kullanım örneğine ve Linux dağıtımına göre değişir.

Linux dağıtımım .NET paketleri sağlıyor ve bunları kullanmak istiyorum

  • PowerShell ve MSSQL gibi diğer paketler için Microsoft deposunu kullanıyor musunuz?

    • Evet

      Paket yöneticinizi Microsoft deposundaki .NET paketlerini yoksayacak şekilde yapılandırın. Her iki depodan da .NET yüklemiş olmanız mümkündür, bu nedenle birini veya diğerini seçmek istiyorsunuz.

      1. Mevcut .NET paketlerini dağıtımınızdan kaldırın. Baştan başlamak ve bunları yanlış depodan yüklemediğinizden emin olmak istiyorsunuz.

        sudo dnf remove 'dotnet*' 'aspnet*' 'netstandard*'
        
      2. Microsoft deposunu .NET paketlerini yoksayacak şekilde yapılandırın.

        echo 'excludepkgs=dotnet*,aspnet*,netstandard*' | sudo tee -a /etc/yum.repos.d/microsoft-prod.repo
        
      3. Dağıtımın paket akışından .NET'i yeniden yükleyin. Daha fazla bilgi için bkz. Linux'a .NET yükleme.

    • Hayır

      1. Mevcut .NET paketlerini dağıtımınızdan kaldırın. Baştan başlamak ve bunları yanlış depodan yüklemediğinizden emin olmak istiyorsunuz.

        sudo dnf remove 'dotnet*' 'aspnet*' 'netstandard*'
        
      2. Microsoft depo akışını dağıtımınızdan silin.

        sudo dnf remove packages-microsoft-prod
        
      3. Dağıtımın paket akışından .NET'i yeniden yükleyin. Daha fazla bilgi için bkz. Linux'a .NET yükleme.

  • PowerShell ve MSSQL gibi diğer paketler için Microsoft deposunu kullanıyor musunuz?

    • Evet

      Paket yöneticinizi Microsoft deposundaki .NET paketlerini yoksayacak şekilde yapılandırın. Her iki depodan da .NET yüklemiş olmanız mümkündür, bu nedenle birini veya diğerini seçmek istiyorsunuz.

      1. Mevcut .NET paketlerini dağıtımınızdan kaldırın. Baştan başlamak ve bunları yanlış depodan yüklemediğinizden emin olmak istiyorsunuz.

        sudo apt remove 'dotnet*' 'aspnet*' 'netstandard*'
        
      2. /etc/apt/preferences henüz yoksa oluşturun.

        touch /etc/apt/preferences
        
      3. /etc/apt/preferences dosyasını bir düzenleyicide açın ve dotnet, aspnetcore veya netstandard ile başlayan paketlerin Microsoft deposundan kaynaklanmasını engelleyen aşağıdaki ayarları ekleyin:

        Package: dotnet* aspnet* netstandard*
        Pin: origin "packages.microsoft.com"
        Pin-Priority: -10
        
      4. Dağıtımın paket akışından .NET'i yeniden yükleyin. Daha fazla bilgi için bkz. Linux'a .NET yükleme.

    • Hayır

      1. Mevcut .NET paketlerini dağıtımınızdan kaldırın. Baştan başlamak ve bunları yanlış depodan yüklemediğinizden emin olmak istiyorsunuz.

        sudo apt remove 'dotnet*' 'aspnet*' 'netstandard*'
        
      2. Microsoft depo akışını dağıtımınızdan silin.

        sudo rm -f /etc/apt/sources.list.d/microsoft-prod.list
        sudo apt update
        
      3. Dağıtımın paket akışından .NET'i yeniden yükleyin. Daha fazla bilgi için bkz. Linux'a .NET yükleme.

Linux dağıtımım tarafından sağlanmayan bir .NET sürümüne ihtiyacım var

Dağıtım deposundaki .NET paketlerini yoksaymak için paket yöneticinizi yapılandırın. Her iki depodan da .NET yüklemiş olmanız mümkündür, bu nedenle birini veya diğerini seçmek istiyorsunuz.

  1. Mevcut .NET paketlerini dağıtımınızdan kaldırın. Baştan başlamak ve bunları yanlış depodan yüklemediğinizden emin olmak istiyorsunuz.

    sudo dnf remove 'dotnet*' 'aspnet*' 'netstandard*'
    
  2. Linux deposunu .NET paketlerini yoksayacak şekilde yapılandırın.

    echo 'excludepkgs=dotnet*,aspnet*,netstandard*' | sudo tee -a /etc/yum.repos.d/<your-package-source>.repo
    

    Emin olun ki, <your-package-source> değerini dağıtımınızın paket kaynağıyla yerine geçirdiğinize.

  3. Dağıtımın paket akışından .NET'i yeniden yükleyin. Daha fazla bilgi için bkz. Linux'a .NET yükleme.

Dağıtım deposundaki .NET paketlerini yoksaymak için paket yöneticinizi yapılandırın. Her iki depodan da .NET yüklemiş olmanız mümkündür, bu nedenle birini veya diğerini seçmek istiyorsunuz.

  1. Mevcut .NET paketlerini dağıtımınızdan kaldırın. Baştan başlamak ve bunları yanlış depodan yüklemediğinizden emin olmak istiyorsunuz.

    sudo apt remove 'dotnet*' 'aspnet*' 'netstandard*'
    
  2. /etc/apt/preferences henüz yoksa oluşturun.

    touch /etc/apt/preferences
    
  3. Bir düzenleyicide /etc/apt/preferences açın ve dotnet, aspnetcore veya netstandard ile başlayan paketlerin dağıtımın deposundan kaynaklanmasını önlemek için uygun bir apt tercihleri parçası ekleyin.

    Package: dotnet* aspnet* netstandard*
    Pin: origin "<your-package-source>"
    Pin-Priority: -10
    

    Emin olun ki, <your-package-source> değerini dağıtımınızın paket kaynağıyla yerine geçirdiğinize.

    Dağıtımınızda birden fazla paket kaynağı olabilir.

    Örneğin, ABD'deki Ubuntu'da archive.ubuntu.com için bir parça ve security.ubuntu.com için başka bir parça kullanmanız gerekebilir. Her bir parçayı aşağıdaki gibi boş bir satırla ayırın:

    Package: dotnet* aspnet* netstandard*
    Pin: origin "archive.ubuntu.com"
    Pin-Priority: -10
    
    Package: dotnet* aspnet* netstandard*
    Pin: origin "security.ubuntu.com"
    Pin-Priority: -10
    

    Tavsiye

    apt-cache policy Kaynağı bulmak için komutunu kullanın:

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

    Tavsiye

    Ubuntu .NET backports paket deposunu kaydettiyseniz, paket yöneticinizi kapsanan .NET paketlerini yoksayacak şekilde yapılandırmak yerine Ubuntu .NET backports paket deposunun kaydını kaldırmanız gerekir. Aksi takdirde, paket yöneticiniz, bu depo sadece .NET paketlerini içerdiği için, bu depodaki paket dizinini çeker ancak onu görmezden gelir. Bu, her çağırdığınızda apt updateyerel paket dizininizin güncelleştirilmesini etkili bir şekilde yavaşlatır.

    apt-cache policy Komutunu kullanarak Ubuntu .NET backports paket deposunu kaydedip kaydolmadığınızı denetleyin:

    apt-cache policy '?name(dotnet.*)' | grep 'ppa.launchpadcontent.net/dotnet/backports' | sort -u
    
  4. .NET'i Microsoft paket akışından yeniden yükleyin. Daha fazla bilgi için bkz. Linux'a .NET yükleme. Ubuntu kullanıyorsanız bkz. Ubuntu dağıtımım istediğim .NET sürümünü içermiyor veya destek dışı bir .NET sürümüne ihtiyacım var.

Çevrimiçi referanslar

Diğer birçok kullanıcı bu sorunları bildirdi. Bu sorunların listesi aşağıdadır. Neler olabileceğine ilişkin içgörüler için bunları okuyabilirsiniz:

Ayrıca bakınız