Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Ketika Anda mencoba menggunakan .NET di Linux, perintah seperti dotnet new dan dotnet run mungkin gagal dengan pesan yang terkait dengan file yang tidak ditemukan, seperti fxr, libhostfxr.so, atau FrameworkList.xml. Beberapa pesan kesalahan mungkin mirip dengan item berikut:
System.IO.FileNotFoundException
System.IO.FileNotFoundException: Tidak dapat menemukan file '/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/5.0.0/data/FrameworkList.xml'.
Terjadi kesalahan fatal.
Terjadi kesalahan fatal. Pustaka libhostfxr.so yang diperlukan tidak dapat ditemukan.
atau
Terjadi kesalahan fatal. Folder [/usr/share//dotnethost/fxr] tidak ada.
atau
Terjadi kesalahan fatal, folder [//usrshare//dotnethost/fxr] tidak berisi folder turunan bernomor versi apa pun.
Pesan generik tentang dotnet tidak ditemukan
Pesan umum mungkin muncul yang menunjukkan SDK tidak ditemukan, atau bahwa paket telah diinstal.
Salah satu gejala dari masalah ini adalah folder /usr/lib64/dotnet dan /usr/share/dotnet berada di sistem Anda.
Tips
dotnet --info Gunakan perintah untuk mencantumkan SDK dan Runtime mana yang diinstal. Untuk informasi lebih lanjut, lihat Cara memeriksa apakah .NET sudah diinstal.
Apa yang terjadi
Penting
Dimulai dengan .NET 9, Microsoft hanya menerbitkan paket untuk distribusi Linux yang didukung yang tidak menerbitkan paket mereka sendiri. Untuk informasi selengkapnya, lihat Menginstal .NET di Linux.
Kesalahan ini biasanya terjadi ketika dua repositori paket Linux menyediakan paket .NET. Meskipun Microsoft menyediakan repositori paket Linux untuk sumber paket .NET, beberapa distribusi Linux juga menyediakan paket .NET. Distribusi ini meliputi:
- Alpine Linux
- Arch
- Aliran CentOS
- Fedora
- Red Hat Enterprise Linux (RHEL)
- Ubuntu 22.04+
Jika Anda mencampur paket .NET dari dua sumber yang berbeda, Anda mungkin akan mengalami masalah. Paket mungkin menempatkan hal-hal di jalur yang berbeda dan mungkin dikompilasi secara berbeda.
Solusi
Solusi untuk masalah ini adalah menggunakan .NET dari satu repositori paket. Repositori mana yang harus dipilih, dan cara melakukannya, bervariasi menurut kasus penggunaan dan distribusi Linux.
- Distribusi Linux saya menyediakan paket .NET, dan saya ingin menggunakannya.
- Saya memerlukan versi .NET yang tidak disediakan oleh distribusi Linux saya.
Distribusi Linux saya menyediakan paket .NET, dan saya ingin menggunakannya
Apakah Anda menggunakan repositori Microsoft untuk paket lain, seperti PowerShell dan MSSQL?
Ya
Konfigurasikan manajer paket Anda untuk mengabaikan paket .NET dari repositori Microsoft. Ada kemungkinan Bahwa Anda telah menginstal .NET dari kedua repositori, jadi Anda ingin memilih satu atau yang lain.
Hapus paket .NET yang ada dari distribusi Anda. Anda ingin memulai kembali dan memastikan bahwa Anda tidak menginstalnya dari repositori yang salah.
sudo dnf remove 'dotnet*' 'aspnet*' 'netstandard*'Konfigurasikan repositori Microsoft untuk mengabaikan paket .NET.
echo 'excludepkgs=dotnet*,aspnet*,netstandard*' | sudo tee -a /etc/yum.repos.d/microsoft-prod.repoInstal ulang .NET dari umpan paket distribusi. Untuk informasi selengkapnya, lihat Menginstal .NET di Linux.
Tidak
Hapus paket .NET yang ada dari distribusi Anda. Anda ingin memulai kembali dan memastikan bahwa Anda tidak menginstalnya dari repositori yang salah.
sudo dnf remove 'dotnet*' 'aspnet*' 'netstandard*'Hapus umpan repositori Microsoft dari distribusi Anda.
sudo dnf remove packages-microsoft-prodInstal ulang .NET dari umpan paket distribusi. Untuk informasi selengkapnya, lihat Menginstal .NET di Linux.
Apakah Anda menggunakan repositori Microsoft untuk paket lain, seperti PowerShell dan MSSQL?
Ya
Konfigurasikan manajer paket Anda untuk mengabaikan paket .NET dari repositori Microsoft. Ada kemungkinan Bahwa Anda telah menginstal .NET dari kedua repositori, jadi Anda ingin memilih satu atau yang lain.
Hapus paket .NET yang ada dari distribusi Anda. Anda ingin memulai kembali dan memastikan bahwa Anda tidak menginstalnya dari repositori yang salah.
sudo apt remove 'dotnet*' 'aspnet*' 'netstandard*'Buat
/etc/apt/preferences, jika belum ada.touch /etc/apt/preferencesBuka
/etc/apt/preferencesdi editor dan tambahkan pengaturan berikut, yang mencegah paket yang dimulai dengandotnet, ,aspnetcoreataunetstandardbersumber dari repositori Microsoft:Package: dotnet* aspnet* netstandard* Pin: origin "packages.microsoft.com" Pin-Priority: -10Instal ulang .NET dari umpan paket distribusi. Untuk informasi selengkapnya, lihat Menginstal .NET di Linux.
Tidak
Hapus paket .NET yang ada dari distribusi Anda. Anda ingin memulai kembali dan memastikan bahwa Anda tidak menginstalnya dari repositori yang salah.
sudo apt remove 'dotnet*' 'aspnet*' 'netstandard*'Hapus umpan repositori Microsoft dari distribusi Anda.
sudo rm -f /etc/apt/sources.list.d/microsoft-prod.list sudo apt updateInstal ulang .NET dari umpan paket distribusi. Untuk informasi selengkapnya, lihat Menginstal .NET di Linux.
Saya memerlukan versi .NET yang tidak disediakan oleh distribusi Linux saya
Konfigurasikan manajer paket Anda untuk mengabaikan paket .NET dari repositori distribusi. Ada kemungkinan Bahwa Anda telah menginstal .NET dari kedua repositori, jadi Anda ingin memilih satu atau yang lain.
Hapus paket .NET yang ada dari distribusi Anda. Anda ingin memulai kembali dan memastikan bahwa Anda tidak menginstalnya dari repositori yang salah.
sudo dnf remove 'dotnet*' 'aspnet*' 'netstandard*'Konfigurasikan repositori Linux untuk mengabaikan paket .NET.
echo 'excludepkgs=dotnet*,aspnet*,netstandard*' | sudo tee -a /etc/yum.repos.d/<your-package-source>.repoPastikan untuk mengganti
<your-package-source>dengan sumber paket distribusi Anda.Instal ulang .NET dari umpan paket distribusi. Untuk informasi selengkapnya, lihat Menginstal .NET di Linux.
Konfigurasikan manajer paket Anda untuk mengabaikan paket .NET dari repositori distribusi. Ada kemungkinan Bahwa Anda telah menginstal .NET dari kedua repositori, jadi Anda ingin memilih satu atau yang lain.
Hapus paket .NET yang ada dari distribusi Anda. Anda ingin memulai kembali dan memastikan bahwa Anda tidak menginstalnya dari repositori yang salah.
sudo apt remove 'dotnet*' 'aspnet*' 'netstandard*'Buat
/etc/apt/preferences, jika belum ada.touch /etc/apt/preferencesBuka
/etc/apt/preferencesdi editor dan tambahkan fragmen preferensi apt untuk mencegah paket yang dimulai dengandotnet, ,aspnetcoreataunetstandardbersumber dari repositori distribusi.Package: dotnet* aspnet* netstandard* Pin: origin "<your-package-source>" Pin-Priority: -10Pastikan untuk mengganti
<your-package-source>dengan sumber paket distribusi Anda.Distribusi Anda mungkin memiliki lebih dari satu sumber paket.
Misalnya, pada Ubuntu di AS, Anda mungkin perlu menggunakan satu fragmen untuk
archive.ubuntu.comdan yang lain untuksecurity.ubuntu.com. Pisahkan setiap fragmen dengan baris kosong seperti ini:Package: dotnet* aspnet* netstandard* Pin: origin "archive.ubuntu.com" Pin-Priority: -10 Package: dotnet* aspnet* netstandard* Pin: origin "security.ubuntu.com" Pin-Priority: -10Tips
apt-cache policyGunakan perintah untuk menemukan sumber:apt-cache policy '?name(dotnet.*)' | grep -v microsoft | grep '/ubuntu' | cut -d"/" -f3 | sort -uTips
Jika Anda mendaftarkan repositori paket backport Ubuntu .NET, Anda harus membatalkan pendaftaran repositori paket backport Ubuntu .NET alih-alih mengonfigurasi manajer paket Anda untuk mengabaikan paket .NET yang terkandung. Jika tidak, manajer paket Anda menarik indeks paket dari repositori ini, hanya untuk mengabaikannya, karena repositori hanya berisi paket .NET. Ini secara efektif memperlambat pembaruan indeks paket lokal Anda setiap kali Anda memanggil
apt update.apt-cache policyGunakan perintah untuk memeriksa apakah Anda mendaftarkan repositori paket backport ubuntu .NET:apt-cache policy '?name(dotnet.*)' | grep 'ppa.launchpadcontent.net/dotnet/backports' | sort -uInstal ulang .NET dari umpan paket Microsoft. Untuk informasi selengkapnya, lihat Menginstal .NET di Linux. Jika menggunakan Ubuntu, lihat Distribusi Ubuntu saya tidak menyertakan versi .NET yang saya inginkan, atau saya memerlukan versi .NET yang tidak didukung.
Referensi online
Banyak pengguna lain telah melaporkan masalah ini. Berikut ini adalah daftar masalah tersebut. Anda dapat membacanya untuk wawasan tentang apa yang mungkin terjadi:
System.IO.FileNotFoundException dan '/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/5.0.0/data/FrameworkList.xml'
- SDK #15785: tidak dapat membangun proyek baru setelah meningkatkan ke 5.0.3
- SDK #15863: "MSB4018 tugas ResolveTargetingPackAssets gagal secara tak terduga" setelah memperbarui ke 5.0.103
- SDK #17411: dotnet build selalu menghasilkan kesalahan
- SDK #12075: dotnet 3.1.301 di Fedora 32 tidak dapat ditemukan FrameworkList.xml karena tidak ada
Kesalahan fatal: libhostfxr.so tidak dapat ditemukan
Kesalahan fatal: folder /host/fxr tidak ada
Kesalahan fatal: folder /host/fxr tidak berisi folder turunan bernomor versi apa pun
Kesalahan umum tanpa pesan yang jelas