Aracılığıyla paylaş


.NET Standard

.NET Standard, birden çok .NET uygulamasında kullanılabilen .NET API'lerinin resmi bir belirtimidir. .NET Standard'ın ardındaki motivasyon, .NET ekosisteminde daha fazla tekdüzelik oluşturmaktı. .NET 5 ve üzeri sürümler, çoğu senaryoda .NET Standard gereksinimini ortadan kaldıran tekdüzenlik oluşturma konusunda farklı bir yaklaşım benimser. Ancak, .NET Framework ile .NET Core gibi diğer .NET uygulamaları arasında kod paylaşmak istiyorsanız, kitaplığınız .NET Standard 2.0'ı hedeflemelidir. .NET Standard'ın yeni sürümleri yayımlanmayacak, ancak .NET 5 ve sonraki sürümleri .NET Standard 2.1 ve önceki sürümleri desteklemeye devam edecektir.

.NET 5+ ile .NET Standard arasında seçim yapma hakkında bilgi için bu makalenin devamında .NET 5+ ve .NET Standard bölümüne bakın.

.NET Standart sürümleri

.NET Standard sürümlenir. Her yeni sürüm daha fazla API ekler. Bir kitaplık, .NET Standard'ın belirli bir sürümüne göre oluşturulduğunda, .NET Standard (veya üzeri) sürümünü uygulayan herhangi bir .NET uygulamasında çalıştırılabilir.

.NET Standard'ın daha yüksek bir sürümünü hedeflemek, kitaplığın daha fazla API kullanmasına olanak tanır, ancak yalnızca .NET'nin daha yeni sürümlerinde kullanılabileceğini gösterir. Daha düşük bir sürümü hedeflemek kullanılabilir API'leri azaltır, ancak kitaplığın daha fazla yerde çalışabileceği anlamına gelir.

Standart sürüm .NET seçin

.NET Standart 1.0, kullanılabilir 37.118 API'nin 7.949'una sahiptir.

.NET uygulaması Sürüm desteği
.NET ve .NET Core 1.0, 1.1, 2.0, 2.1, 2.2, 3.0, 3.1, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0
.NET Framework 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
Mono 4.6, 5.4, 6.4
Xamarin.iOS 10.0, 10.14, 12.16
Xamarin. Mac 3.0, 3.8, 5.16
Xamarin. Android 7.0, 8.0, 10.0
Universal Windows Platform 8.0, 8.1, 10.0, 10.0.16299, TBD
Birlik 2018.1

Daha fazla bilgi için bkz. .NET Standard 1.0. Etkileşimli tablo için bkz. .NET Standart sürümler.

Hangi .NET Standard sürümünü hedeflemelisiniz?

.NET Standard'ı hedefliyorsanız, önceki bir sürümü desteklemeniz gerekmediği sürece .NET Standard 2.0'ı hedeflemenizi öneririz. Genel amaçlı kitaplıkların çoğu .NET Standard 2.0 dışında API'lere ihtiyaç duymamalıdır ve .NET Framework .NET Standard 2.1'i desteklemez. .NET Standard 2.0 tüm modern platformlar tarafından desteklenir ve tek bir hedefle birden çok platformu desteklemenin önerilen yoludur.

.NET Standard 1.x'i desteklemeniz gerekiyorsa, ayrıca .NET Standard 2.0'ı hedeflemenizi öneririz. .NET Standart 1.x, büyük bir paket bağımlılık grafiği oluşturan ve proje oluşturulduğunda çok sayıda paketin indirildiğine neden olan ayrıntılı bir NuGet paketleri kümesi olarak dağıtılır. Daha fazla bilgi için bu makalenin devamında Cross-platform hedefleme ve .NET 5+ ve .NET Standard bölümüne bakın.

Not

.NET 9'dan başlayarak, projeniz Standart 1.x .NET hedeflerse bir derleme uyarısı gönderilir. Daha fazla bilgi için bkz. .NET Standard 1.x hedefleri için yayılan Warning.

.NET Standard sürümleme kuralları

İki birincil sürüm oluşturma kuralı vardır:

  • Ekleme: .NET Standart sürümler mantıksal olarak eşmerkezli dairelerdir: yüksek sürümler önceki sürümlerdeki tüm API'leri içerir. Sürümler arasında hataya neden olan bir değişiklik yoktur.
  • Sabit: Gönderildikten sonra .NET Standart versiyonlar dondurulur.

2.1 sürümünden sonra yeni .NET Standart sürümleri olmayacaktır. Daha fazla bilgi için bu makalenin devamında .NET 5+ ve .NET Standard bölümüne bakın.

Şartname

.NET Standart belirtimi, standartlaştırılmış bir API kümesidir. Belirtim, özellikle Microsoft (.NET Framework, .NET Core ve Mono içerir) ve Unity gibi .NET uygulayıcılar tarafından korunur.

Resmi yapıtlar

Resmi belirtim, standardın parçası olan API'leri tanımlayan bir dizi .cs dosyasıdır. ref dizinidotnet/standard deposunda .NET Standart API'leri tanımlar.

NETStandard.Library metapackage (source) bir veya daha .NET fazla Standart sürümü tanımlayan (kısmen) kitaplık kümesini açıklar.

gibi System.Runtimebelirli bir bileşen şunları açıklar:

  • .NET Standard'ın bir parçası (sadece kapsamına ilişkindir).
  • Bu kapsam için .NET Standard'ın birden çok sürümü.

Türev yapıtlar, daha kolay okumayı ve belirli geliştirici senaryolarını (örneğin, derleyici kullanarak) etkinleştirmek için sağlanır.

  • markdown'da API listesi.
  • NuGet paketleri olarak dağıtılan başvuru derlemeleri, NETStandard.Library metapaketi tarafından referans alınır.

Paket gösterimi

.NET Standart referans derlemeleri için birincil dağıtım aracı NuGet paketleridir. Uygulamalar, her .NET uygulama için uygun olan çeşitli yollarla sunulur.

NuGet paketleri bir veya daha fazla çerçeveyi hedefler. .NET Standard paketleri ".NET Standard" çerçevesini hedefler. netstandard compact hedef çerçeve tanımlayıcısı (TFM) kullanarak .NET Standard çerçevesini hedefleyebilirsiniz, örneğin, netstandard1.4. .NET'nin birden çok uygulamasında çalıştırılması amaçlanan kitaplıklar .NET Standard çerçevesini hedeflemelidir. En geniş API kümesi için netstandard2.0 hedefle çünkü kullanılabilir API sayısı .NET Standart 1.6 ile 2.0 arasında ikiye katlandı.

NETStandard.Library meta paketi, .NET Standard'ı tanımlayan nuget paketlerinin tamamına başvurur. Hedeflemenin netstandard en yaygın yolu bu meta paketi referans almaktır. ~40 .NET kitaplığını ve .NET Standard'ı tanımlayan ilişkili API'leri açıklar ve erişim sağlar. Ek API'lere erişim sağlamak üzere netstandard hedefleyen ilave paketlere başvurabilirsiniz.

Sürüm oluşturma

Belirtim tekil değil, doğrusal olarak sürümlenmiş bir API kümesidir. Standardın ilk sürümü bir temel API kümesi oluşturur. Sonraki sürümler API'ler ekler ve önceki sürümler tarafından tanımlanan API'leri devralır. API'leri Standarttan kaldırmak için belirlenmiş bir sağlama yoktur.

.NET Standard, herhangi bir .NET uygulamasına özgü değildir ve bu uygulamalardan herhangi birinin sürüm oluşturma düzeniyle eşleşmez.

Daha önce belirtildiği gibi, 2.1'in ardından yeni .NET Standart sürümleri olmayacaktır.

Hedef .NET Standart

.NET Standart Kitaplıklar'ı, netstandard çerçevesi ve NETStandard.Library metapaketi kombinasyonunu kullanarak oluşturabilirsiniz.

.NET Framework uyumluluk modu

.NET Standard 2.0'dan başlayarak .NET Framework uyumluluk modu kullanıma sunulmuştur. Bu uyumluluk modu, .NET Standart projelerin .NET Standard için derlenmiş gibi .NET Framework kitaplıklarına başvurmasını sağlar. .NET Framework kitaplıklarına başvurmak, Windows Presentation Foundation (WPF) API'leri kullanan kitaplıklar gibi tüm projelerde çalışmaz.

Daha fazla bilgi için bkz. .NET Framework uyumluluk modu.

.NET Standard kitaplıkları ve Visual Studio

Visual Studio'da .NET Standart kitaplıklar oluşturmak için Windows'da Visual Studio 2019 veya üzeri veya Visual Studio 2017 sürüm 15.3 veya üzeri yüklü olduğundan emin olun.

Projelerinizde yalnızca .NET Standard 2.0 kitaplıklarını kullanmanız gerekiyorsa, bunu Visual Studio 2015'te de yapabilirsiniz. Ancak, NuGet istemcisi 3.6 veya üzerinin yüklü olması gerekir. Visual Studio 2015 için NuGet istemcisini NuGet indirmeleri sayfasından indirebilirsiniz.

.NET 5+ ve .NET Standart

.NET 5, .NET 6, .NET 7, .NET 8, .NET 9 ve .NET 10, Windows masaüstü uygulamaları ve platformlar arası konsol uygulamaları, bulut hizmetleri ve web siteleri için kullanılabilen tek bir özellik ve API kümesine sahip tek ürünlerdir. .NET 10 TFMs bu çok çeşitli senaryoları yansıtır:

  • net10.0

    Bu TFM, her yerde çalışan kodlara yöneliktir. Birkaç özel durum dışında, yalnızca platformlar arası çalışan teknolojileri içerir.

  • net10.0-windows

    Bu, her başvurusuna işletim sistemine özgü işlevsellik ekleyen bir işletim sistemine özgü TFM örneğidir.

netx.0'ı ne zaman hedefleyeceğiniz ile netstandard'i hangi durumda hedefleyeceğiniz

Standart 2.0 veya sonraki .NET hedefleyen mevcut kodlar için TFM'yi net8.0 veya sonraki bir TFM olarak değiştirmeniz gerekmez. .NET 8, .NET 9 ve .NET 10, Standart 2.1 ve önceki .NET uygular. .NET Standard'dan .NET 8+ sürümüne yeniden hedeflemenin tek nedeni daha fazla çalışma zamanı özelliğine, dil özelliğine veya API'ye erişim elde etmektir. Örneğin, C# 9 kullanmak için .NET 5 veya sonraki bir sürümü hedeflemeniz gerekir. Daha yeni özelliklere erişim elde etmek ve kitaplığınızı diğer .NET uygulamaları için kullanılabilir duruma getirmek için .NET ve .NET Standard'ı birden çok hedefleyebilirsiniz.

Not

Projeniz .NET Standard 1.x'i hedefliyorsa, onu .NET Standard 2.0 veya .NET 8+ sürümüne tekrar hedeflemenizi öneririz. Daha fazla bilgi için bkz. .NET Standard 1.x hedefleri için yayılan Warning.

.NET 5+ için yeni koda yönelik bazı yönergeler aşağıdadır:

  • Uygulama bileşenleri

    Bir uygulamayı birkaç bileşene bölmek için kitaplıklar kullanıyorsanız net10.0'yi hedef olarak öneririz. Kolaylık olması için, uygulamanızı oluşturan tüm projeleri aynı .NET sürümünde tutmak en iyisidir. Ardından her yerde aynı BCL özelliklerini varsayabilirsiniz.

  • Yeniden kullanılabilir kitaplıklar

    NuGet'te göndermeyi planladığınız yeniden kullanılabilir kitaplıklar oluşturuyorsanız erişim ve kullanılabilir özellik kümesi arasındaki dengeyi göz önünde bulundurun. .NET Standard 2.0, .NET Framework tarafından desteklenen en son sürümdür, bu nedenle oldukça büyük bir özellik kümesiyle iyi erişim sağlar. Kullanılabilir özellik kümesini en az erişim artışı için sınırladığınız için Standart 1.x .NET hedeflemenizi önermeyiz.

    Eğer .NET Framework'i desteklemeniz gerekmiyorsa, .NET Standard 2.1 veya .NET 10'u hedefleyebilirsiniz. Standart 2.1 .NET atlayıp doğrudan .NET 10'a geçmenizi öneririz. .NET Standart 2.0 ve .NET 5+ için en yaygın kullanılan kitaplıklar çoklu hedefleme yapar. .NET Standard 2.0'ı desteklemek size en fazla erişimi sağlarken, .NET 5+'ı desteklemek, zaten .NET 5+ sürümde olan müşteriler için en son platform özelliklerinden yararlanmanızı sağlar.

.NET Standard sorunları

.NET Standard ile ilgili bazı sorunlar, .NET 5 ve sonraki sürümlerin neden platformlar ve iş yükleri arasında kod paylaşmanın daha iyi bir yolu olduğunu açıklamaya yardımcı olur:

  • Yeni API'ler ekleme yavaşlığı

    .NET Standard, tüm .NET uygulamalarının desteklemesi gereken bir API kümesi olarak oluşturulduğu için yeni API'ler eklemeye yönelik teklifler için bir gözden geçirme işlemi yapıldı. Amaç, yalnızca mevcut ve gelecekteki tüm .NET platformlarında uygulanabilecek API'leri standart hale getirmekti. Sonuç olarak, bir özellik belirli bir sürümü kaçırdıysa Standart sürümüne eklenmeden önce birkaç yıl beklemeniz gerekebilir. Ardından .NET Standard'ın yeni sürümünün yaygın olarak desteklenmesi için daha da uzun süre beklersiniz.

    Solution in .NET 5+: Bir özellik uygulandığında, kod tabanı paylaşıldığından her .NET 5+ uygulama ve kitaplık için zaten kullanılabilir. API belirtimi ile uygulaması arasında bir fark olmadığından, yeni özelliklerden .NET Standard'dan çok daha hızlı yararlanabilirsiniz.

  • Karmaşık sürüm oluşturma

    API belirtiminin kendi uygulamalarından ayrılması, API belirtimi sürümleri ile uygulama sürümleri arasında karmaşık eşlemeye neden olur. Bu karmaşıklık, bu makalenin önceki bölümlerinde gösterilen tabloda ve bunu yorumlama yönergelerinde açıktır.

    .NET 5+ Çözümü: .NET 5+ API belirtimi ile uygulaması arasında bir ayrım yoktur. Sonuç, basitleştirilmiş bir TFM şemasıdır. Tüm iş yükleri için bir TFM ön eki vardır: net10.0 kitaplıklar, konsol uygulamaları ve web uygulamaları için kullanılır. Tek farklılık, belirli bir platform için platforma özgü API'leri belirten bir sonektir, örneğin gibi net10.0-windows. Bu TFM adlandırma kuralı sayesinde, belirli bir uygulamanın belirli bir kitaplığı kullanıp kullanamayacağını kolayca anlayabilirsiniz. .NET Standard için olan gibi sürüm numarası eşdeğerleri tablosu gerekmez.

  • Platform tarafından desteklenmeyen çalışma zamanı istisnaları

    .NET Standard, platforma özgü API'leri kullanıma sunar. Kodunuz hatasız derlenebilir ve taşınabilir olmasa bile herhangi bir platforma taşınabilir gibi görünebilir. Belirli bir API için uygulaması olmayan bir platformda çalıştığında çalışma zamanı hataları alırsınız.

    .NET 5+ Çözümü: .NET 5+ SDK'ları varsayılan olarak etkinleştirilen kod analizörlerini içerir. Platform uyumluluk çözümleyicisi, üzerinde çalışmak istediğiniz platformlarda desteklenmeyen API'lerin yanlışlıkla kullanıldığını algılar. Daha fazla bilgi için bkz. Platform uyumluluğu çözümleyicisi.

.NET Standart kullanım dışı değil

.NET Standard, birden çok .NET uygulaması tarafından kullanılabilecek kitaplıklar için hala gereklidir. Aşağıdaki senaryolarda .NET Standard'i hedeflemenizi öneririz:

  • .NET Framework ile .NET diğer tüm uygulamaları arasında kod paylaşmak için netstandard2.0 kullanın.
  • Mono ve .NET Core 3.x arasında kod paylaşmak için netstandard2.1 kullanın.

Ayrıca bkz.