Bir uygulama veya kitaplıktaki bir çerçeveyi hedeflediğinizde, uygulama veya kitaplık için kullanılabilir hale getirmek istediğiniz API kümesini belirtirsiniz. Proje dosyanızda hedef çerçeveyi bir hedef çerçeve adı (TFM) kullanarak belirtirsiniz.
Bir uygulama veya kitaplık .NET Standard sürümünü hedefleyebilir. .NET Standart sürümleri, tüm .NET uygulamalarında standartlaştırılmış API kümelerini temsil eder. Örneğin, bir kitaplık .NET Standard 1.6'yı hedefleyebilir ve aynı kod tabanını kullanarak .NET Core ve .NET Framework genelinde çalışan API'lere erişim elde edebilir.
Uygulama veya kitaplık, uygulamaya özgü API'lere erişim elde etmek için belirli bir .NET uygulamasını da hedefleyebilir. Örneğin, Xamarin.iOS'u hedefleyen bir uygulamanın (örneğin, Xamarin.iOS10) iOS 10 için Xamarin tarafından sağlanan iOS API sarmalayıcılarına erişimi vardır veya Evrensel Windows Platformu (UWP, ) hedefleyen bir uygulama, uap10.0Windows 10 çalıştıran cihazlar için derlenen API'lere erişebilir.
.NET Framework gibi bazı hedef çerçeveler için, API'ler çerçevenin bir sisteme yüklediği derlemeler tarafından tanımlanır ve uygulama çerçevesi API'leri (örneğin, ASP.NET) içerebilir.
Paket tabanlı hedef çerçeveler için (örneğin, .NET 5+, .NET Core ve .NET Standard), API'ler uygulama veya kitaplığa dahil edilen NuGet paketleri tarafından tanımlanır.
En son sürümler
Aşağıdaki tablo en yaygın hedef çerçeveleri, bunlara nasıl başvuruldıklarını ve hangi .NET Standard sürümünü uyguladıklarını tanımlar. Bu hedef çerçeve sürümleri en son kararlı sürümlerdir. Yayın öncesi sürümler gösterilmez. Hedef çerçeve adı (TFM), .NET uygulamasının veya kitaplığının hedef çerçevesini belirtmek için standartlaştırılmış bir belirteç biçimidir.
Hedef çerçeve
Sonuncu kararlı sürüm
Hedef çerçeve adı (TFM)
Uygulanan .NET Standart sürümü
.NET 9
9
net9.0
2.1
.NET 8
8
net8.0
2.1
.NET Standard
2.1
netstandard2.1
Yok
.NET Core
3.1
netcoreapp3.1
2.1
.NET Framework
4.8.1
net481
2.0
Desteklenen hedef çerçeveler
Hedef çerçeveye genellikle bir TFM tarafından başvurulur. Aşağıdaki tabloda .NET SDK ve NuGet istemcisi tarafından desteklenen hedef çerçeveler gösterilmektedir. Eşdeğerler köşeli ayraç içinde gösterilir. Örneğin, win81 ile eşdeğer bir TFM'dir netcore451.
* .NET 5 ve üzeri TFM'ler işletim sistemine özgü bazı çeşitlemeler içerir. Daha fazla bilgi için aşağıdaki .NET 5+ işletim sistemine özgü TFM'ler bölümüne bakın.
.NET 5+ işletim sistemine özgü TFM'ler
net5.0, net6.0, net7.0, net8.0ve net.0 TFM'leri farklı platformlarda çalışan teknolojiler içerir. İşletim sistemine özgü bir TFM'nin belirtilmesi, windows forms veya iOS bağlamaları gibi bir işletim sistemine özgü API'lerin uygulamanızın kullanımına sunulmasını sağlar. İşletim sistemine özgü TFM'ler, TFM gibi temel TFM'leri için kullanılabilen her API'yi net9.0 de devralır.
.NET 5; WinForms, WPF ve UWP API'leri için Windows'a özgü bağlamaları içeren işletim sistemine özgü TFM'yi kullanıma sunar net5.0-windows . .NET 6 ve sonraki sürümlerin işletim sistemine özgü ek TFM'leri vardır; örneğin, net6.0-ios.
Aşağıdaki tabloda .NET 5+ TFM'lerin uyumluluğu gösterilmektedir.
netcoreapp1.. 3.1 (artı olarak diğer devralınan net5.0her şey )
net6.0
(Sonraki sürümü net5.0)
net6.0-android
xamarin.android (artı olarak, öğesinden devralınan net6.0diğer her şey )
net6.0-ios
Devralınan her şey net6.0
net6.0-maccatalyst
Devralınan her şey net6.0
net6.0-macos
Devralınan her şey net6.0
net6.0-tvos
Devralınan her şey net6.0
net6.0-windows
(Sonraki sürümü net5.0-windows)
net7.0
(Sonraki sürümü net6.0)
net7.0-android
(Sonraki sürümü net6.0-android)
net7.0-ios
(Sonraki sürümü net6.0-ios)
net7.0-maccatalyst
(Sonraki sürümü net6.0-maccatalyst)
net7.0-macos
(Sonraki sürümü net6.0-macos)
net7.0-tizen
tizen40 (artı olarak, öğesinden devralınan net7.0diğer her şey )
net7.0-tvos
(Sonraki sürümü net6.0-tvos)
net7.0-windows
(Sonraki sürümü net6.0-windows)
net8.0
(Sonraki sürümü net7.0)
net8.0-android
(Sonraki sürümü net7.0-android)
net8.0-browser
Devralınan her şey net8.0
net8.0-ios
(Sonraki sürümü net7.0-ios)
net8.0-maccatalyst
(Sonraki sürümü net7.0-maccatalyst)
net8.0-macos
(Sonraki sürümü net7.0-macos)
net8.0-tizen
(Sonraki sürümü net7.0-tizen)
net8.0-tvos
(Sonraki sürümü net7.0-tvos)
net8.0-windows
(Sonraki sürümü net7.0-windows)
net9.0
(Sonraki sürümü net8.0)
net9.0-android
(Sonraki sürümü net8.0-android)
net9.0-browser
(Sonraki sürümü net8.0-browser)
net9.0-ios
(Sonraki sürümü net8.0-ios)
net9.0-maccatalyst
(Sonraki sürümü net8.0-maccatalyst)
net9.0-macos
(Sonraki sürümü net8.0-macos)
net9.0-tizen
(Sonraki sürümü net8.0-tizen)
net9.0-tvos
(Sonraki sürümü net8.0-tvos)
net9.0-windows
(Sonraki sürümü net8.0-windows)
Uygulamanızı farklı platformlarda taşınabilir hale getirmek ancak işletim sistemine özgü API'lere erişmeye devam etmek için, önişlemci yönergelerini kullanarak #if işletim sistemine özgü birden çok TFM'yi hedefleyebilir ve işletim sistemine özgü API çağrılarının çevresine platform korumaları ekleyebilirsiniz. Kullanılabilir simgelerin listesi için bkz . Önişlemci simgeleri.
Önerilen hedefler
Uygulamanızda hangi TFM'nin kullanılacağını belirlemek için şu yönergeleri kullanın:
Birden çok platforma taşınan uygulamalar temel TFM'yi (örneğin, net9.0) hedeflemelidir. Bu, çoğu kitaplığı içerir, ancak aynı zamanda ASP.NET Core ve Entity Framework'i de içerir.
Platforma özgü kitaplıklar platforma özgü tatları hedeflemelidir. Örneğin, WinForms ve WPF projeleri hedeflenmelidir net9.0-windows.
Platformlar arası uygulama modelleri (Xamarin Forms, ASP.NET Core) ve köprü paketleri (Xamarin Essentials) en azından temel TFM'yi (örneğin, net9.0) hedeflemelidir, ancak daha fazla API veya özellik sağlamak için platforma özgü ek tatlar da hedeflenebilir.
TFM'lerde işletim sistemi sürümü
İşletim sistemine özgü TFM'nin sonunda isteğe bağlı bir işletim sistemi sürümü de belirtebilirsiniz; örneğin, net6.0-ios15.0. Sürüm, uygulamanız veya kitaplığınız için hangi API'lerin kullanılabilir olduğunu gösterir. Uygulamanızın veya kitaplığınızın çalışma zamanında desteklediği işletim sistemi sürümünü denetlemez. Projenizin derlediği başvuru derlemelerini seçmek ve NuGet paketlerinden varlıkları seçmek için kullanılır. Bu sürümü çalışma zamanı işletim sistemi sürümünden kaldırmak için "platform sürümü" veya "OS API sürümü" olarak düşünün.
İşletim sistemine özgü bir TFM, platform sürümünü açıkça belirtmediğinde, temel TFM ve platform adından çıkarılabilen zımni bir değere sahiptir. Örneğin, .NET 6'da Android için varsayılan platform değeri , 31.0kurallı net6.0-android31.0 TFM'nin kısaltması olduğu anlamına gelirnet6.0-android. Daha yeni bir temel TFM için örtülü platform sürümü daha yüksek olabilir, örneğin, gelecekteki net8.0-android bir TFM ile net8.0-android34.0eşlenebilir. Kısaltma biçimi yalnızca proje dosyalarında kullanılmak üzere tasarlanmıştır ve NuGet gibi diğer araçlara geçirilmeden önce .NET SDK'sının MSBuild hedefleri tarafından kurallı biçime genişletilir.
Aşağıdaki tabloda, her .NET sürümü için varsayılan hedef platform değerleri (TPV) gösterilmektedir.
.NET sürümü
Android
iOS
Mac Catalyst
macOS
tvOS
Tizen
Windows
.NET 8
34.0
17.2
17.2
14.2
17.1
7.0
10.0
.NET 9
35.0
18,0
18,0
15.0
7.0
10.0
Not
.NET 8 ve önceki sürümlerdeki Apple platformlarında (iOS, macOS, tvOS ve Mac Catalyst) varsayılan TPV, şu anda yüklü olan iş yükünde desteklenen en son sürümdür.
Bu, örneğin. .NET 8'de iOS iş yükünü güncelleştirmenin, bu iş yüküne yeni bir iOS sürümü desteği eklendiğinde daha yüksek bir varsayılan TPV'ye neden olabileceği anlamına gelir. Yukarıdaki tabloda, varsayılan TPV, belirtilen .NET sürümünün ilk sürümündeki TPV'dir.
.NET 9'dan başlayarak, bu özel davranış yalnızca yürütülebilir projeler için geçerlidir.
Kitaplık projeleri için varsayılan TPV artık tüm diğer platformlar gibi büyük bir .NET sürümünün tamamı için aynı kalıyor.
.NET SDK, temel TFM'nin yeni bir sürümü olmadan tek bir platform için yeni yayımlanan API'leri destekleyecek şekilde tasarlanmıştır. Bu, .NET'in önemli bir sürümünü beklemeden platforma özgü işlevlere erişmenizi sağlar. TFM'deki platform sürümünü artırarak yeni yayımlanan bu API'lere erişim elde edebilirsiniz. Örneğin, Android platformu .NET 6.0.x SDK güncelleştirmesi içinde API düzeyi 32 API'leri eklediyse, bunlara TFM net6.0-android32.0kullanarak erişebilirsiniz.
Öncelik
Uygulamanız farklı TFM'ler için birden çok varlığı olan bir pakete başvuruyorsa, sürüm numarasına daha yakın olan varlıklar tercih edilir. Örneğin, uygulamanız ve net6.0-ios paketi ve net5.0-iosnet6.0 için net6.0 varlıklar sunuyorsa varlıklar kullanılır. Daha fazla bilgi için bkz . Öncelikleri.
Eski işletim sistemi sürümlerini destekleme
Platforma özgü bir uygulama veya kitaplık, bu işletim sisteminin belirli bir sürümündeki API'lere karşı derlenmiş olsa da, özelliğini proje dosyanıza ekleyerek SupportedOSPlatformVersion önceki işletim sistemi sürümleriyle uyumlu hale getirebilirsiniz. özelliği, SupportedOSPlatformVersion uygulamanızı veya kitaplığınızı çalıştırmak için gereken en düşük işletim sistemi sürümünü gösterir. Projede bu en düşük çalışma zamanı işletim sistemi sürümünü açıkça belirtmezseniz, varsayılan olarak TFM'den platform sürümüne ayarlır.
Uygulamanızın eski bir işletim sistemi sürümünde düzgün çalışması için, işletim sisteminin bu sürümünde mevcut olmayan API'leri çağıramaz. Ancak, daha yeni API'lere yapılan çağrıların çevresine korumalar ekleyebilirsiniz, böylece bunlar yalnızca onları destekleyen bir işletim sistemi sürümünde çalıştırılırken çağrılır. Bu düzen, uygulamanızı veya kitaplığınızı eski işletim sistemi sürümlerinde çalıştırmayı destekleyecek şekilde tasarlamanıza ve yeni işletim sistemi sürümlerinde çalışırken daha yeni işletim sistemi işlevselliğinden yararlanmanıza olanak tanır.
Değeri SupportedOSPlatformVersion (açık veya varsayılan) platform uyumluluk çözümleyicisi tarafından kullanılır. Bu çözümleyici, daha yeni API'lere yönelik korumasız çağrıları algılar ve uyarır. Platform uyumluluk çözümleyicisinin daha düşük SupportedOSPlatformVersion bir değere sahip projelerden bu derlemenin API'lerine yönelik korumasız çağrıları algılaması için projenin derlenmiş derlemesine derleme UnsupportedOSPlatformAttribute özniteliği olarak eklenir. Bazı platformlarda bu değer, SupportedOSPlatformVersion platforma özgü uygulama paketleme ve derleme işlemlerini etkiler ve bu işlemler bu platformların belgelerinde ele alınmıştır.
Uygulama veya kitaplığın iOS 15.0 API'lerine erişimi olduğunu ancak iOS 13.0 ve üzerinde çalıştırılmasını desteklediğini belirtmek için ve SupportedOSPlatformVersion MSBuild özelliklerini kullanan TargetFramework bir proje dosyasının örnek alıntısı aşağıda verilmiştir:
Hedef çerçeveler bir proje dosyasında belirtilir. Tek bir hedef çerçeve belirtildiğinde TargetFramework öğesini kullanın. Aşağıdaki konsol uygulaması proje dosyasında .NET 9'un nasıl hedeflen olduğu gösterilmektedir:
Birden çok hedef çerçeve belirttiğinizde, her hedef çerçeve için derlemelere koşullu olarak başvurabilirsiniz. Kodunuzda, if-then-else mantığıyla ön işlemci sembollerini kullanarak bu derlemelere karşı koşullu olarak derleme yapabilirsiniz.
Aşağıdaki kitaplık projesi .NET Standard (netstandard1.4) ve .NET Framework (net40 ve net45) API'lerini hedefler. Birden çok hedef çerçeve ile çoğul TargetFrameworks öğesini kullanın. Condition Öznitelikler, kitaplık iki .NET Framework TFM için derlendiğinde uygulamaya özgü paketleri içerir:
Derleme sistemi, SDK stilinde projeler kullanırken Desteklenen hedef çerçeve sürümleri tablosunda gösterilen hedef çerçeveleri temsil eden ön işlemci sembollerinin farkındadır. .NET Standard, .NET Core veya .NET 5+ TFM'yi ön işlemci simgesine dönüştürmek için, noktaları ve kısa çizgileri alt çizgiyle değiştirin ve küçük harfleri büyük harfle değiştirin (örneğin, simgesi netstandard1.4 şeklindedir NETSTANDARD1_4).
Özelliği aracılığıyla bu simgelerin oluşturulmasını DisableImplicitFrameworkDefines devre dışı bırakabilirsiniz. Bu özellik hakkında daha fazla bilgi için bkz . DisableImplicitFrameworkDefines.
.NET hedef çerçeveleri için ön işlemci simgelerinin tam listesi:
Hedef Çerçeveler
Simgeler
Ek simgeler (.NET 5+ SDK'larda kullanılabilir)
Platform simgeleri (yalnızca kullanılabilir) işletim sistemine özgü bir TFM belirttiğinizde)
Sürümsüz simgeler, hedeflediğiniz sürümden bağımsız olarak tanımlanır.
Sürüme özgü simgeler yalnızca hedeflediğiniz sürüm için tanımlanır.
Simgeler <framework>_OR_GREATER , hedeflediğiniz sürüm ve önceki tüm sürümler için tanımlanır. Örneğin, .NET Framework 2.0'ı hedef alıyorsanız, şu simgeler tanımlanır: NET20, NET20_OR_GREATER, NET11_OR_GREATERve NET10_OR_GREATER.
Simgeler NETSTANDARD<x>_<y>_OR_GREATER yalnızca .NET Standard hedefleri için tanımlanır, .NET Core ve .NET Framework gibi .NET Standard uygulayan hedefler için tanımlanmaz.
Bunlar MSBuild TargetFramework özelliği ve NuGet tarafından kullanılan hedef çerçeve adlarından (TFM' ler) farklıdır.
Kullanım dışı bırakılan hedef çerçeveler
Aşağıdaki hedef çerçeveler kullanım dışıdır. Bu hedef çerçeveleri hedefleyen paketler belirtilen değişimlere geçirilmelidir.
Bu içeriğin kaynağı GitHub'da bulunabilir; burada ayrıca sorunları ve çekme isteklerini oluşturup gözden geçirebilirsiniz. Daha fazla bilgi için katkıda bulunan kılavuzumuzu inceleyin.
.NET geri bildirimi
.NET, açık kaynak bir projedir. Geri bildirim sağlamak için bir bağlantı seçin:
Bu modülde, Yükseltme Yardımcısı'nı kullanarak bir ASP.NET Framework uygulamasını ne zaman, neden ve nasıl ASP.NET Core'a modernleştirmeyi öğreneceksiniz.