.NET RID Kataloğu

RID, çalışma zamanı tanımlayıcısı için kısadır. RID değerleri, uygulamanın çalıştığı hedef platformları tanımlamak için kullanılır. .NET paketleri tarafından NuGet paketlerindeki platforma özgü varlıkları temsil etmek için kullanılır. Aşağıdaki değerler RID örnekleridir: linux-x64, win-x64veya osx-x64. Yerel bağımlılıkları olan paketler için RID, paketin hangi platformlarda geri yüklenebileceğini belirtir.

Proje dosyanızın öğesinde <RuntimeIdentifier> tek bir RID ayarlanabilir. Birden çok RID, proje dosyasının <RuntimeIdentifiers> öğesinde noktalı virgülle ayrılmış liste olarak tanımlanabilir. Ayrıca aşağıdaki .NET CLI komutlarıyla birlikte seçeneği aracılığıyla --runtime da kullanılır:

Beton işletim sistemlerini temsil eden RID'ler genellikle şu deseni izler: [os].[version]-[architecture]-[additional qualifiers] burada:

  • [os] işletim/platform sistemi adıdır. Örneğin, ubuntu.

  • [version] , noktayla ayrılmış (.) sürüm numarası biçimindeki işletim sistemi sürümüdür. Örneğin, 15.10.

    Pazarlama sürümleri genellikle farklı platform API'leri yüzey alanına sahip işletim sisteminin birden çok ayrı sürümünü temsil etmediğinden, sürüm pazarlama sürümü olmamalıdır.

  • [architecture] işlemci mimarisidir. Örneğin: x86, x64, armveya arm64.

  • [additional qualifiers] farklı platformları daha da ayırt edin. Örneğin: aot.

RID grafı

RID grafiği veya çalışma zamanı geri dönüş grafiği, birbiriyle uyumlu RID'lerin listesidir.

Bu RID'ler depodaki PortableRuntimeIdentifierGraph.jsondotnet/sdk tanımlanır. Bu dosyada, temel olan dışındaki tüm RID'lerin bir "#import" deyimi içerdiğini görebilirsiniz. Bu deyimler uyumlu RID'leri gösterir.

.NET 8'den önce, sürüme özgü ve dağıtıma özgü RID'ler düzenli olarak Microsoft.NETCore.Platforms paketine ve depoda bulunan runtime.json dosyasındaki RID grafiğine dotnet/runtime eklenirdi. Bu grafik artık güncelleştirilmez ve geriye dönük uyumluluk seçeneği olarak bulunur. Geliştiriciler, sürüme özgü olmayan ve dağıtıma özgü olmayan RID'ler kullanmalıdır.

NuGet paketleri geri yüklediğinde, belirtilen çalışma zamanı için tam bir eşleşme bulmaya çalışır. Tam eşleşme bulunamazsa NuGet, RID grafiğine göre en yakın uyumlu sistemi bulana kadar grafiği geri adım adım gösterir.

Aşağıdaki örnek RID için osx-x64 gerçek girdidir:

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

Yukarıdaki RID, öğesini içeri aktardığını osx-x64unix-x64belirtir. Bu nedenle NuGet paketleri geri yüklediğinde pakette için osx-x64 tam bir eşleşme bulmaya çalışır. NuGet belirli bir çalışma zamanını bulamazsa, örneğin çalışma zamanlarını belirten unix-x64 paketleri geri yükleyebilir.

Aşağıdaki örnekte, runtime.json dosyasında da tanımlanan biraz daha büyük bir RID grafiği gösterilmektedir:

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

Alternatif olarak RID grafiğini (veya grafiğin herhangi bir alt kümesini) kolayca görselleştirmek için RidGraph aracını kullanabilirsiniz.

Tüm RID'ler sonunda kök any RID'ye geri eşler.

RID'lerle ilgili dikkate alınması gereken bazı noktalar vardır:

  • Bileşen parçalarını almak için RID'leri ayrıştırmaya çalışmayın.

  • Platform için önceden tanımlanmış RID'leri kullanın.

  • RID'lerin belirli olması gerekir, bu nedenle gerçek RID değerinden hiçbir şey varsaymayın.

  • Kesinlikle gerekli olmadıkça program aracılığıyla RID oluşturmayın.

    Bazı uygulamaların RID'leri program aracılığıyla hesaplaması gerekir. Öyleyse, hesaplanan RID'lerin büyük/küçük harf de dahil olmak üzere katalogla tam olarak eşleşmesi gerekir. Farklı büyük/küçük harfe sahip RID'ler, işletim sistemi büyük/küçük harfe duyarlı olduğunda (örneğin Linux) sorunlara neden olur çünkü değer genellikle çıkış yolları gibi şeyler oluşturulurken kullanılır. Örneğin, Visual Studio'da çözüm yapılandırma yöneticisi ve proje özelliklerindeki bilgilere dayalı özel bir yayımlama sihirbazı düşünün. Çözüm yapılandırması yerine geçersiz bir değer ARM64arm64geçirirse, gibi win-ARM64geçersiz bir RID ile sonuçlanabilir.

RID'leri kullanma

RID'leri kullanabilmek için hangi RID'lerin mevcut olduğunu bilmeniz gerekir. En son ve tam sürüm için depodaki dotnet/sdk PortableRuntimeIdentifierGraph.json bakın.

Belirli bir sürüme veya işletim sistemi dağıtımına bağlı olmayan ve 'taşınabilir' olarak kabul edilen RID'ler önerilen seçenektir. Bu, taşınabilir RID'lerin hem platforma özgü bir uygulama oluşturmak hem de RID'ye özgü varlıklarla NuGet paketi oluşturmak için kullanılması gerektiği anlamına gelir.

.NET 8'den başlayarak, .NET SDK'sının ve çalışma zamanının varsayılan davranışı yalnızca sürüme özgü olmayan ve dağıtıma özgü olmayan RID'leri dikkate almaktır. SDK , geri yükleme ve derleme sırasında daha küçük bir taşınabilir RID grafiği kullanır. , RuntimeInformation.RuntimeIdentifierçalışma zamanının oluşturulduğu platformu döndürür. Çalışma zamanında .NET bilinen bir taşınabilir RID kümesi kullanarak RID'ye özgü varlıkları bulur. Çalışma zamanında yoksayılabilir RID'ye özgü varlıklara sahip bir uygulama oluştururken SDK bir uyarı gönderir: NETSDK1206.

Belirli bir işletim sistemi sürümü veya dağıtımı için varlıkları yükleme

.NET artık işletim sistemi sürümüne veya dağıtımına özgü bağımlılıkları çözümlemek için birinci sınıf destek sağlamayı denemez. Uygulamanızın veya paketinizin işletim sistemi sürümüne veya dağıtımına göre farklı varlıklar yüklemesi gerekiyorsa, varlıkları koşullu olarak yüklemek için mantığı uygulaması gerekir.

Platform hakkında bilgi almak için API'leri kullanın System.OperatingSystem . Windows ve macOS'ta işletim Environment.OSVersionsistemi sürümünü döndürür. Linux'ta çekirdek sürümü olabilir; Linux dağıtım adını ve sürüm bilgilerini almak için önerilen yaklaşım /etc/os-release dosyasını okumaktır.

.NET, yükleme mantığını özelleştirmek için çeşitli uzantı noktaları sağlar; örneğin, NativeLibrary.SetDllImportResolver(Assembly, DllImportResolver), AssemblyLoadContext.ResolvingUnmanagedDll, AssemblyLoadContext.Resolvingve AppDomain.AssemblyResolve. Bunlar geçerli platforma karşılık gelen varlığı yüklemek için kullanılabilir.

Bilinen RID'ler

Aşağıdaki listede, her işletim sistemi için kullanılan en yaygın RID'lerin küçük bir alt kümesi gösterilmektedir. En son ve tam sürüm için depodaki dotnet/sdk PortableRuntimeIdentifierGraph.json bakın.

Windows RID'leri

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

Daha fazla bilgi için bkz . .NET bağımlılıkları ve gereksinimleri.

Linux RID'leri

  • linux-x64 (CentOS, Debian, Fedora, Ubuntu ve türevleri gibi çoğu masaüstü dağıtımı)
  • linux-musl-x64(Alpine Linux gibi musl kullanan basit dağıtımlar)
  • linux-musl-arm64 (64 bit Arm v8 ve minimalist temel görüntüler için Docker görüntüleri oluşturmak için kullanılır)
  • linux-arm (Raspberry Pi Model 2+'da Raspbian gibi Arm üzerinde çalışan Linux dağıtımları)
  • linux-arm64 (Raspberry Pi Model 3+ üzerinde Ubuntu Server 64 bit gibi 64 bit Arm üzerinde çalışan Linux dağıtımları)
  • linux-bionic-arm64 (Android'in biyonik libc'sini kullanan dağıtımlar, örneğin Termux)

Daha fazla bilgi için bkz . .NET bağımlılıkları ve gereksinimleri.

macOS RID'leri

macOS RID'ler eski "OSX" markasını kullanır.

  • osx-x64 (En düşük işletim sistemi sürümü macOS 10.12 Sierra'dır)
  • osx-arm64

Daha fazla bilgi için bkz . .NET bağımlılıkları ve gereksinimleri.

iOS RID'leri

  • ios-arm64

Android RID'leri

  • android-arm64

Ayrıca bkz.