Linux'ta eksik dosyalarla ilgili .NET hatalarını giderme
Linux üzerinde .NET kullanmaya çalıştığınızda ve gibi dotnet new
dotnet 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
Ö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
- 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.
- Linux dağıtımım tarafından sağlanmayan bir .NET sürümüne ihtiyacım var.
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.
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*'
.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
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
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*'
Microsoft depo akışını dağıtımınızdan silin.
sudo dnf remove packages-microsoft-prod
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.
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*'
henüz yoksa oluşturun
/etc/apt/preferences
.touch /etc/apt/preferences
Bir düzenleyicide açın
/etc/apt/preferences
ve ,aspnetcore
netstandard
veya iledotnet
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
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
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*'
Microsoft depo akışını dağıtımınızdan silin.
sudo rm -f /etc/apt/sources.list.d/microsoft-prod.list sudo apt update
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.
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*'
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.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.
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*'
henüz yoksa oluşturun
/etc/apt/preferences
.touch /etc/apt/preferences
Bir düzenleyicide açın
/etc/apt/preferences
ve ,aspnetcore
iledotnet
başlayan veyanetstandard
dağıtımın deposundan kaynaklanan paketleri önlemek için bir apt tercihleri parçası 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.com
security.ubuntu.com
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
İ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 update
yerel 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
.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:
System.IO.FileNotFoundException ve '//usr/share/dotnetpacks/Microsoft.NETCore.App.Ref/5.0.0/data/FrameworkList.xml'
- SDK #15785: 5.0.3 sürümüne yükselttikten sonra yepyeni bir proje oluşturulamıyor
- SDK #15863: 5.0.103'e güncelleştirdikten sonra "MSB4018 ResolveTargetingPackAssets görevi beklenmedik şekilde başarısız oldu"
- SDK #17411: dotnet derleme her zaman hata oluşturuyor
- SDK #12075: dotnet 3.1.301 on Fedora 32 FrameworkList.xml bulunamadı çünkü yok
Önemli hata: libhostfxr.so bulunamadı
Önemli hata: klasör /host/fxr yok
Önemli hata: /host/fxr klasörü sürüm numaralı alt klasör içermiyor
Net iletiler olmadan genel hatalar