SDK stili projelerde hedef çerçeveler

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 Son
kararlı sürüm
Hedef çerçeve adı (TFM) Uygulanan
.NET Standart sürümü
.NET 8 8 net8.0 2.1
.NET 7 7 net7.0 2.1
.NET 6 6 net6.0 2.1
.NET 5 5 net5.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.

Hedef Çerçeve TFM
.NET 5+ (ve .NET Core) netcoreapp1.0
netcoreapp1.1
netcoreapp2.0
netcoreapp2.1
netcoreapp2.2
netcoreapp3.0
netcoreapp3.1
net5.0*
net6.0*
net7.0*
net8.0*
.NET Standard netstandard1.0
netstandard1.1
netstandard1.2
netstandard1.3
netstandard1.4
netstandard1.5
netstandard1.6
netstandard2.0
netstandard2.1
.NET Framework net11
net20
net35
net40
net403
net45
net451
net452
net46
net461
net462
net47
net471
net472
net48
net481
Windows Store netcore [netcore45]
netcore45 [win] [win8]
netcore451 [win81]
.NET Micro Framework netmf
Silverlight sl4
sl5
Windows Phone wp [wp7]
wp7
wp75
wp8
wp81
wpa81
Evrensel Windows Platformu uap [uap10.0]
uap10.0 [win10] [netcore50]

* .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.0ve net8.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 net6.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.

TFM Ile uyumlu
net5.0 net1.. 4 (NU1701 uyarısı ile)
netcoreapp1.. 3.1 (WinForms veya WPF'ye başvurulduğunda uyarı)
netstandard1.. 2.1
net5.0-windows 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 xamarin.ios (artı olarak, öğesinden devralınan net6.0diğer her şey )
net6.0-maccatalyst xamarin.ios (artı olarak, öğesinden devralınan net6.0diğer her şey )
net6.0-macos xamarin.mac (artı olarak, öğesinden devralınan net6.0diğer her şey )
net6.0-tvos xamarin.tvos (artı olarak, öğesinden devralınan net6.0diğer her şey )
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)

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, net8.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 net8.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, net8.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 iOS için varsayılan platform değeri , 15.0kurallı net6.0-ios15.0 TFM'nin kısaltması olduğu anlamına gelirnet6.0-ios. Daha yeni bir temel TFM için örtülü platform sürümü daha yüksek olabilir, örneğin, gelecekteki net8.0-ios bir TFM ile net8.0-ios16.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ü Platform Varsayılan TPV
.NET 6 Android 31.0
.NET 7 Android 33.0
.NET 8 Android 34.0
.NET 6 iOS 15.0
.NET 7 iOS 16.1
.NET 8 iOS 17.2
.NET 6 Mac Catalyst 15.0
.NET 7 Mac Catalyst 16.1
.NET 8 Mac Catalyst 17.2
.NET 6 macOS 12.0
.NET 7 macOS 13.0
.NET 8 macOS 14.2
.NET 6 tvOS 15.1
.NET 7 tvOS 16.1
.NET 8 tvOS 17.1
.NET 7 Tizen 7.0
.NET 8 Tizen 8.0
.NET 6 Windows 7.0
.NET 7 Windows 7.0
.NET 8 Windows 7.0

.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, iOS platformu bir .NET 6.0.x SDK güncelleştirmesi içinde iOS 15.1 API'leri eklediyse, bunlara TFM net6.0-ios15.1kullanarak 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:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>net6.0-ios15.0</TargetFramework>
    <SupportedOSPlatformVersion>13.0</SupportedOSPlatformVersion>
  </PropertyGroup>
  ...

</Project>

Hedef çerçeve belirtme

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 8'i hedefleme gösterilmektedir:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net8.0</TargetFramework>
  </PropertyGroup>

</Project>

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:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFrameworks>netstandard1.4;net40;net45</TargetFrameworks>
  </PropertyGroup>

  <!-- Conditionally obtain references for the .NET Framework 4.0 target -->
  <ItemGroup Condition=" '$(TargetFramework)' == 'net40' ">
    <Reference Include="System.Net" />
  </ItemGroup>

  <!-- Conditionally obtain references for the .NET Framework 4.5 target -->
  <ItemGroup Condition=" '$(TargetFramework)' == 'net45' ">
    <Reference Include="System.Net.Http" />
    <Reference Include="System.Threading.Tasks" />
  </ItemGroup>

</Project>

Kitaplığınızda veya uygulamanızda, her hedef çerçeve için derlemek üzere önişlemci yönergelerini kullanarak koşullu kod yazarsınız:

public class MyClass
{
    static void Main()
    {
#if NET40
        Console.WriteLine("Target framework: .NET Framework 4.0");
#elif NET45
        Console.WriteLine("Target framework: .NET Framework 4.5");
#else
        Console.WriteLine("Target framework: .NET Standard 1.4");
#endif
    }
}

Önişlemci simgeleri

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)
.NET Framework NETFRAMEWORK, NET48, NET472, , NET471, NET47, NET462, , NET461, NET46, NET452NET451, NET40NET45, NET35,NET20 NET48_OR_GREATER, , NET471_OR_GREATER, , NET47_OR_GREATER, NET462_OR_GREATER, NET461_OR_GREATER, , NET46_OR_GREATER, NET452_OR_GREATER, NET45_OR_GREATERNET451_OR_GREATER, NET35_OR_GREATERNET40_OR_GREATER, NET472_OR_GREATERNET20_OR_GREATER
.NET Standard NETSTANDARD, , NETSTANDARD2_0NETSTANDARD2_1, , NETSTANDARD1_6, NETSTANDARD1_5, NETSTANDARD1_4, NETSTANDARD1_3, NETSTANDARD1_2, NETSTANDARD1_1,NETSTANDARD1_0 NETSTANDARD2_1_OR_GREATER, NETSTANDARD2_0_OR_GREATER, NETSTANDARD1_6_OR_GREATER, , NETSTANDARD1_5_OR_GREATER, NETSTANDARD1_4_OR_GREATER, NETSTANDARD1_3_OR_GREATER, NETSTANDARD1_2_OR_GREATER, NETSTANDARD1_1_OR_GREATER, NETSTANDARD1_0_OR_GREATER
.NET 5+ (ve .NET Core) NET, , NET7_0, , NET6_0, NET5_0, NETCOREAPP, , NETCOREAPP3_1, NETCOREAPP3_0, NETCOREAPP2_1NETCOREAPP2_2, NETCOREAPP1_1NETCOREAPP2_0, NET8_0NETCOREAPP1_0 NET8_0_OR_GREATER, NET7_0_OR_GREATER, , NET6_0_OR_GREATER, NET5_0_OR_GREATER, NETCOREAPP3_1_OR_GREATER, NETCOREAPP3_0_OR_GREATER, , NETCOREAPP2_2_OR_GREATERNETCOREAPP2_1_OR_GREATER, NETCOREAPP2_0_OR_GREATER, NETCOREAPP1_1_OR_GREATER,NETCOREAPP1_0_OR_GREATER ANDROID, BROWSER, IOS, , MACCATALYST, MACOS, TVOS, WINDOWS,
[OS][version] (örneğin IOS15_1),
[OS][version]_OR_GREATER (örneğin IOS15_1_OR_GREATER)

Not

  • 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.

Kullanım dışı TFM Değiştirme
aspnet50
aspnetcore50
dnxcore50
Dnx
dnx45
dnx451
dnx452
netcoreapp
dotnet
dotnet50
dotnet51
dotnet52
dotnet53
dotnet54
dotnet55
dotnet56
netstandard
netcore50 uap10.0
Kazanmak netcore45
win8 netcore45
win81 netcore451
win10 uap10.0
winrt netcore45

Ayrıca bkz.