Aracılığıyla paylaş


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

Linux üzerinde .NET kullanmaya çalıştığınızda ve gibi dotnet newdotnet run komutlar , libhostfxr.soveya FrameworkList.xmlgibi fxrbir dosyanın bulunamaması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.

  • Bulunamadı hakkında dotnet genel iletiler

    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 ve /usr/share/dotnet klasörlerinin /usr/lib64/dotnet sisteminizde olmasıdır.

İpucu

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ı denetleme.

Ne var ne yok

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
  • Arch
  • CentOS
  • CentOS Stream
  • Fedora
  • RHEL
  • 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. .NET paketlerini yoksaymak için Microsoft deposunu 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. henüz yoksa oluşturun /etc/apt/preferences.

        touch /etc/apt/preferences
        
      3. Bir düzenleyicide açın /etc/apt/preferences ve , aspnetcorenetstandard veya ile dotnetbaş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
    

    değerini dağıtımınızın paket kaynağıyla değiştirdiğinden <your-package-source> emin olun.

  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. henüz yoksa oluşturun /etc/apt/preferences.

    touch /etc/apt/preferences
    
  3. Bir düzenleyicide açın /etc/apt/preferences ve , aspnetcoreile dotnetbaşlayan veya netstandard dağıtımın deposundan kaynaklanan paketleri önlemek için bir apt tercihler çerçevesi ekleyin.

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

    değerini dağıtımınızın paket kaynağıyla değiştirdiğinden <your-package-source> emin olun.

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

    Örneğin, ABD'deki Ubuntu'da için bir parça ve için archive.ubuntu.comsecurity.ubuntu.combaş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
    

    İpucu

    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
    

    İpucu

    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, depo yalnızca .NET paketleri içerdiğinden paket yöneticiniz paket dizinini bu depodan yalnızca yoksaymak için çeker. 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 başvurular

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