Katalog RID .NET

RID adalah singkatan dari pengidentifikasi runtime. Nilai RID digunakan untuk mengidentifikasi platform target tempat aplikasi berjalan. Nilai tersebut digunakan oleh paket .NET untuk mewakili aset khusus platform dalam paket NuGet. Nilai berikut adalah contoh RID: linux-x64, , win-x64atau osx-x64. Untuk paket dengan dependensi asli, RID menunjuk pada platform di mana paket dapat dipulihkan.

Satu RID dapat diatur dalam elemen <RuntimeIdentifier> file proyek Anda. Beberapa RID dapat didefinisikan sebagai daftar yang dibatasi titik koma dalam elemen <RuntimeIdentifiers> file proyek. Mereka juga digunakan melalui opsi --runtime dengan perintah .NET CLI berikut:

RID yang mewakili sistem operasi konkret biasanya mengikuti pola ini: [os].[version]-[architecture]-[additional qualifiers] di mana:

  • [os] adalah moniker sistem operasi/platform. Contohnya, ubuntu.

  • [version] adalah versi sistem operasi dalam bentuk nomor versi yang dipisahkan titik (.). Contohnya, 15.10.

    Versi tidak boleh menjadi versi pemasaran, karena versi pemasaran sering mewakili beberapa versi diskrit dari sistem operasi dengan berbagai area permukaan API platform.

  • [architecture] adalah arsitektur prosesor. Misalnya: x86, x64, arm, or arm64.

  • [additional qualifiers] membedakan lebih lanjut platform yang berbeda. Sebagai contoh: aot.

Grafik RID

Grafik RID atau grafik fallback runtime bahasa umum adalah daftar RID yang kompatibel satu sama lain.

RID ini didefinisikan dalam PortableRuntimeIdentifierGraph.json di repositori dotnet/sdk . Dalam file ini, Anda dapat melihat bahwa semua RID, kecuali yang dasar, berisi pernyataan "#import". Pernyataan tersebut menunjukkan RID yang kompatibel.

Sebelum .NET 8, RID khusus versi dan khusus distro secara teratur ditambahkan ke paket Microsoft.NETCore.Platforms dan grafik RID dalam file runtime.json, yang terletak di dotnet/runtime repositori. Grafik ini tidak lagi diperbarui dan ada sebagai opsi kompatibilitas mundur. Pengembang harus menggunakan RID yang non-khusus versi dan non-distro-spesifik.

Ketika memulihkan paket, NuGet mencoba menemukan kecocokan yang tepat untuk runtime bahasa umum yang ditentukan. Jika kecocokan yang tepat tidak ditemukan, NuGet akan mengembalikan grafik hingga menemukan sistem terdekat yang kompatibel sesuai dengan grafik RID.

Contoh berikut adalah entri aktual untuk RID osx-x64:

"osx-x64": {
    "#import": [ "osx", "unix-x64" ]
}

RID di atas menentukan bahwa osx-x64 mengimpor unix-x64. Jadi, ketika memulihkan paket, NuGet mencoba menemukan kecocokan yang tepat untuk osx-x64 dalam paket. Jika tidak dapat menemukan runtime tertentu, NuGet dapat memulihkan paket yang menentukan unix-x64 runtime, misalnya.

Contoh berikut menunjukkan grafik RID yang sedikit lebih besar yang juga didefinisikan dalam file runtime.json:

    linux-arm64     linux-arm32
         |     \   /     |
         |     linux     |
         |       |       |
    unix-arm64   |    unix-x64
             \   |   /
               unix
                 |
                any

Atau, Anda dapat menggunakan alat RidGraph untuk memvisualisasikan grafik RID dengan mudah (atau subset grafik apa pun).

Semua RID akhirnya memetakan kembali ke RID any akar.

Ada beberapa pertimbangan tentang RID yang harus Anda ingat saat bekerja dengan RID:

  • Jangan mencoba mengurai RID untuk mengambil bagian komponen.

  • Gunakan RID yang sudah ditentukan untuk platform.

  • RID harus spesifik, jadi jangan asumsikan apa pun dari nilai RID aktual.

  • Jangan membangun RID secara terprogram kecuali benar-benar diperlukan.

    Beberapa aplikasi perlu menghitung RID secara terprogram. Jika demikian, RID komputasi harus sama persis dengan katalog, termasuk dalam casing. RID dengan casing yang berbeda akan menyebabkan masalah ketika OS peka huruf besar/kecil, misalnya, Linux, karena nilainya sering digunakan saat membuat hal-hal seperti jalur output. Misalnya, pertimbangkan wizard penerbitan kustom di Visual Studio yang bergantung pada informasi dari manajer konfigurasi solusi dan properti proyek. Jika konfigurasi solusi melewati nilai yang tidak valid, misalnya, ARM64 alih-alih arm64, itu dapat mengakibatkan RID yang tidak valid, seperti win-ARM64.

Menggunakan RID

Untuk dapat menggunakan RID, Anda harus tahu RID mana yang ada. Untuk versi terbaru dan lengkap, lihat PortableRuntimeIdentifierGraph.json di dotnet/sdk repositori.

RID yang dianggap 'portabel'—yaitu, tidak terkait dengan versi atau distribusi OS tertentu—adalah pilihan yang direkomendasikan. Ini berarti bahwa RID portabel harus digunakan untuk membangun aplikasi khusus platform dan membuat paket NuGet dengan aset khusus RID.

Dimulai dengan .NET 8, perilaku default .NET SDK dan runtime adalah hanya mempertimbangkan RID khusus non-versi dan non-distro-spesifik. Saat memulihkan dan membangun, SDK menggunakan grafik RID portabel yang lebih kecil. Mengembalikan RuntimeInformation.RuntimeIdentifierplatform tempat runtime dibuat. Pada waktu proses, .NET menemukan aset khusus RID menggunakan serangkaian RID portabel yang diketahui. Saat membangun aplikasi dengan aset khusus RID yang mungkin diabaikan saat runtime, SDK akan memancarkan peringatan: NETSDK1206.

Memuat aset untuk versi atau distribusi OS tertentu

.NET tidak lagi mencoba memberikan dukungan kelas satu untuk menyelesaikan dependensi yang khusus untuk versi atau distribusi OS. Jika aplikasi atau paket Anda perlu memuat aset yang berbeda berdasarkan versi atau distribusi OS, aplikasi atau paket anda harus menerapkan logika untuk memuat aset secara kondisional.

Untuk mendapatkan informasi tentang platform, gunakan System.OperatingSystem API. Di Windows dan macOS, Environment.OSVersion akan mengembalikan versi sistem operasi. Di Linux, mungkin versi kernel—untuk mendapatkan nama distro Linux dan informasi versi, pendekatan yang disarankan adalah membaca file /etc/os-release .

.NET menyediakan berbagai titik ekstensi untuk menyesuaikan logika pemuatan—misalnya, , NativeLibrary.SetDllImportResolver(Assembly, DllImportResolver), AssemblyLoadContext.ResolvingUnmanagedDllAssemblyLoadContext.Resolving, dan AppDomain.AssemblyResolve. Ini dapat digunakan untuk memuat aset yang sesuai dengan platform saat ini.

RID yang diketahui

Daftar berikut menunjukkan subset kecil dari RID yang paling umum digunakan untuk setiap OS. Untuk versi terbaru dan lengkap, lihat PortableRuntimeIdentifierGraph.json di dotnet/sdk repositori.

RID Windows

  • win-x64
  • win-x86
  • win-arm64

Untuk informasi selengkapnya, lihat dependensi dan persyaratan .NET.

RID Linux

  • linux-x64 (Sebagian besar distribusi desktop seperti CentOS, Debian, Fedora, Ubuntu, dan turunannya)
  • linux-musl-x64 (Distribusi ringan menggunakan musl seperti Alpine Linux)
  • linux-musl-arm64 (Digunakan untuk membangun gambar Docker untuk Arm v8 64-bit dan gambar dasar minimalis)
  • linux-arm (Distribusi Linux yang berjalan di Arm seperti Raspbian pada Raspberry Pi Model 2+)
  • linux-arm64 (Distribusi Linux yang berjalan pada Arm 64-bit seperti Ubuntu Server 64-bit pada Raspberry Pi Model 3+)
  • linux-bionic-arm64 (Distribusi menggunakan libc bionik Android, misalnya, Termux)

Untuk informasi selengkapnya, lihat dependensi dan persyaratan .NET.

RID macOS

RID macOS menggunakan merek "OSX" yang lebih lama.

  • osx-x64 (Versi OS minimum adalah macOS 10.12 Sierra)
  • osx-arm64

Untuk informasi selengkapnya, lihat dependensi dan persyaratan .NET.

RID iOS

  • ios-arm64

RID Android

  • android-arm64

Lihat juga