.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 sonraki sürümleri, çoğu senaryoda .NET Standard gereksinimini ortadan kaldıran tekdüzenlik oluşturmak için farklı bir yaklaşım benimser. Ancak, .NET Framework ile .NET Core gibi başka bir .NET uygulaması arasında kod paylaşmak istiyorsanız kitaplığınız .NET Standard 2.0'ı hedeflemelidir. .NET Standard'ın yeni sürümleri yayımlanmaz, ancak .NET 5 ve sonraki sürümleri .NET Standard 2.1 ve önceki sürümleri desteklemeye devam eder.
.NET 5+ ile .NET Standard arasında seçim yapma hakkında bilgi için, bu makalenin devamında yer alan .NET 5+ ve .NET Standard'a bakın.
.NET Standart sürümleri
.NET Standard sürümüdür. Her yeni sürüm daha fazla API ekler. Bir kitaplık belirli bir .NET Standard sürümüne göre oluşturulduğunda, bu .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 izin verir, ancak bunun yalnızca .NET'in 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.
.NET Standard sürümünü seçin
.NET Standard 1.0, kullanılabilir 37.118 API'nin 7.949'unu içerir.
.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 |
.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 |
Evrensel Windows Platformu | 8.0, 8.1, 10.0, 10.0.16299, TBD |
Unity | 2018.1 |
Daha fazla bilgi için bkz . .NET Standard 1.0. Etkileşimli bir tablo için bkz . .NET Standart sürümleri.
Hedeflenen .NET Standart sürümü
.NET Standard'ı hedeflediyseniz, ö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ışındaki 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.NET Standard 2.0'ı da hedeflemenizi öneririz. .NET Standard 1.x, büyük bir paket bağımlılığı 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 platformlar arası hedefleme ve .NET 5+ ve .NET Standard konularını inceleyin.
Not
.NET 9'dan başlayarak, projeniz .NET Standard 1.x'i hedeflerse bir derleme uyarısı gönderilir. Daha fazla bilgi için bkz . .NET Standard 1.x hedefleri için yayılan uyarı.
.NET Standart sürüm oluşturma kuralları
İki birincil sürüm oluşturma kuralı vardır:
- Ekleme: .NET Standart sürümleri 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 sürümleri dondurulur.
2.1 sürümünden sonra yeni .NET Standard sürümü olmayacaktır. Daha fazla bilgi için bu makalenin devamında yer alan .NET 5+ ve .NET Standard'a bakın.
Belirtim
.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. dotnet/standard deposundaki (şimdi arşivlenmiş) ref dizini .NET Standart API'lerini tanımlar.
NETStandard.Library meta paketi (kaynak), bir veya daha fazla .NET Standard sürümünü tanımlayan (kısmen) kitaplık kümesini açıklar.
gibi System.Runtime
belirli bir bileşen şunları açıklar:
- .NET Standard'ın bir parçası (yalnızca kapsamı).
- 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 ve NETStandard.Library meta paketi tarafından başvuruda bulunan başvuru derlemeleri.
Paket gösterimi
.NET Standart referans derlemeleri için birincil dağıtım aracı NuGet paketleridir. Uygulamalar, her .NET uygulaması 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. .NET Standard çerçevesini, örneğinnetstandard1.4
, sıkıştırılmış hedef çerçeve takma adını (TFM) kullanarak netstandard
hedefleyebilirsiniz. .NET'in birden çok uygulamasında çalışması amaçlanan kitaplıklar .NET Standard çerçevesini hedeflemelidir. Kullanılabilir API sayısı .NET Standard 1.6 ile 2.0 arasında ikiden fazla olduğundan, en geniş API kümesi için hedef netstandard2.0
.
Meta paketi, NETStandard.Library
.NET Standard'ı tanımlayan nuget paketlerinin tamamına başvurur. Hedeflemenin netstandard
en yaygın yolu bu meta pakete başvurmaktır. ~40 .NET kitaplıklarını ve .NET Standard'ı tanımlayan ilişkili API'leri açıklar ve erişim sağlar. Ek API'lere erişmeyi hedefleyen netstandard
ek 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 sürümünden sonra yeni .NET Standard sürümleri olmayacaktır.
Hedef .NET Standard
Çerçevenin ve NETStandard.Library
meta paketin netstandard
bir bileşimini kullanarak .NET Standart Kitaplıkları oluşturabilirsiniz.
.NET Framework uyumluluk modu
.NET Standard 2.0'dan itibaren .NET Framework uyumluluk modu kullanıma sunulmuştur. Bu uyumluluk modu, .NET Standard projelerinin .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'lerini kullanan kitaplıklar gibi tüm projelerde çalışmaz.
Daha fazla bilgi için bkz . .NET Framework uyumluluk modu.
.NET Standart kitaplıkları ve Visual Studio
Visual Studio'da .NET Standard kitaplıkları oluşturmak için, Windows'da Visual Studio 2022, Visual Studio 2019 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 Standard
.NET 5, .NET 6, .NET 7, .NET 8 ve .NET 9, 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. Örneğin .NET 8 TFM'leri bu çok çeşitli senaryoları yansıtır:
net8.0
Bu TFM, her yerde çalışan kodlara yöneliktir. Birkaç özel durum dışında, yalnızca platformlar arası çalışan teknolojileri içerir. .NET 8 kodu için hem
net8.0
hem denetcoreapp
netstandard
TFM'lerin yerini alır.net8.0-windows
Bu, başvuruda bulunan her şeye
net8.0
işletim sistemine özgü işlevsellik ekleyen işletim sistemine özgü bir TFM örneğidir.
Hedef ne net8.0
zaman ve netstandard
.NET Standard 2.0 veya üzerini hedefleyen mevcut kodlar için TFM'yi veya sonraki bir TFM olarak net8.0
değiştirmeniz gerekmez. .NET 8, .NET Standard 2.1 ve önceki sürümleri 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 kazanmaktır. Örneğin, C# 9 kullanmak için .NET 5 veya sonraki bir sürümü hedeflemeniz gerekir. Daha yeni özelliklere erişmek için .NET 8 ve .NET Standard'ı birden çok hedefleyebilir ve kitaplığınızı diğer .NET uygulamalarında kullanmaya devam edebilirsiniz.
Not
Projeniz .NET Standard 1.x'i hedef alıyorsa bunu .NET Standard 2.0 veya .NET 6+ olarak yeniden hedeflemenizi öneririz. Daha fazla bilgi için bkz . .NET Standard 1.x hedefleri için yayılan uyarı.
.NET 5+ için yeni koda yönelik bazı yönergeler şunlardır:
Uygulama bileşenleri
Bir uygulamayı birkaç bileşene bölmek için kitaplıklar kullanıyorsanız hedeflenizi
net8.0
ö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. Erişimde en az artış için kullanılabilir özellik kümesini sınırlandıracağınız için .NET Standard 1.x'i hedeflemenizi önermiyoruz.
.NET Framework'i desteklemeniz gerekmiyorsa .NET Standard 2.1 veya .NET 8'i hedefleyebilirsiniz. .NET Standard 2.1'i atlamanızı ve doğrudan .NET 8'e geçmenizi öneririz. Hem .NET Standard 2.0 hem de .NET 5+ için en yaygın kullanılan kitaplıklar çok hedefli. .NET Standard 2.0'ın desteklenmesi size en fazla erişimi sağlarken .NET 5+ desteği ise zaten .NET 5+ üzerinde olan müşteriler için en son platform özelliklerinden yararlanabilmenizi sağlar.
.NET Standart 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. Daha sonra .NET Standard'ın yeni sürümünün yaygın olarak desteklenmesi için daha da uzun süre beklersiniz.
.NET 5+'da çözüm: Bir özellik uygulandığında, kod tabanı paylaşıldığından her .NET 5+ uygulaması ve kitaplığı için zaten kullanılabilir. API belirtimi ile uygulaması arasında bir fark olmadığından yeni özelliklerden .NET Standard'a kıyasla ç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+ içindeki çözüm: .NET 5+ API belirtimi ile uygulaması arasında ayrım yoktur. Sonuç, basitleştirilmiş bir TFM şemasıdır. Tüm iş yükleri için bir TFM ön eki vardır:
net8.0
kitaplıklar, konsol uygulamaları ve web uygulamaları için kullanılır. Tek varyasyon, gibinet8.0-windows
belirli bir platform için platforma özgü API'leri belirten bir sonektir. 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.Çalışma zamanında platform tarafından desteklenmeyen özel durumlar
.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+ içindeki çözüm: .NET 5+ SDK'ları varsayılan olarak etkinleştirilen kod çözümleyicileri 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 Standard 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'ın hedefini kullanmanızı öneririz:
- .NET Framework ile diğer tüm .NET uygulamaları arasında kod paylaşmak için kullanın
netstandard2.0
. - Mono, Xamarin ve .NET Core 3.x arasında kod paylaşmak için kullanın
netstandard2.1
.