SDK stili projelerde hedef çerçeveler

Bir uygulama veya kitaplıkta bir çerçeveyi hedeflerken, uygulama veya kitaplık için kullanılabilir hale yapmak istediğiniz API'leri belirtirsiniz. Hedef çerçeveyi proje dosyanıza bir hedef çerçeve bilinen adı (TFM) kullanarak belirtirsiniz.

Bir uygulama veya kitaplık, uygulamasının bir sürümünü .NET Standard. .NET Standard sürümleri tüm .NET uygulamaları genelinde standartlaştırılmış API kümelerini temsil ediyor. Örneğin, bir kitaplık .NET Standard 1.6'ya hedef olabilir ve aynı kod tabanını kullanarak .NET Core ve .NET Framework api'lere erişim elde ediyor olabilir.

Bir uygulama veya kitaplık, uygulamaya özgü API'lere erişim elde etmek için belirli bir .NET uygulamasını da hedefleyebilirsiniz. Örneğin, Xamarin.iOS'u (örneğin, ) hedef alan bir uygulama, iOS 10 için Xamarin tarafından sağlanan iOS API sarmalayıcılarına veya Universal Windows Platform'u (UWP) hedef alan bir uygulamaya, Windows 10'yi çalıştıran cihazlar için derlenmiş Xamarin.iOS10 uap10.0 API'lere erişime sahiptir.

.NET Framework gibi bazı hedef çerçeveler için API'ler, çerçevenin bir sisteme yüklemiş olduğu derlemeler tarafından tanımlanır ve uygulama çerçevesi API'lerini içerebilir (örneğin, ASP.NET).

Paket tabanlı hedef çerçeveler (örneğin, .NET 5+, .NET Core ve .NET Standard) için API'ler uygulama veya kitaplıkta bulunan NuGet paketleri tarafından tanımlanır.

En son sürümler

Aşağıdaki tabloda en yaygın hedef çerçeveler, bunların nasıl başvurıldıkları ve hangi .NET Standard tanımları yer almaktadır. Bu hedef çerçeve sürümleri en son kararlı sürümlerdir. Sürüm öncesi sürümler gösterilmez. Hedef çerçeve bilinen adı (TFM), bir .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 En son
kararlı sürüm
Hedef çerçeve bilinen adı (TFM) Uygulanan
.NET Standard sürümü
.NET 6 6 net6.0 Yok
.NET 5 5 net5.0 Yok
.NET Standard 2.1 netstandard2.1 Yok
.NET Core 3,1 netcoreapp3.1 2.1
.NET Framework 4.8 net48 2.0

Desteklenen hedef çerçeveler

Hedef çerçeveye genellikle bir TFM tarafından başvurur. Aşağıdaki tabloda. .NET SDK tarafından desteklenen hedef çerçeveler ve NuGet göstermektedir. Eşdeğerler köşeli ayraç içinde gösterilir. Örneğin, ile win81 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
.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
Windows Mağazası 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 sonraki 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

ve net5.0 net6.0 TFM'leri farklı platformlarda kullanılan teknolojileri içerir. İşletim sistemine özgü bir TFM belirtmek, bir işletim sistemine özgü API'leri uygulamanıza (örneğin, Windows Forms veya iOS bağlamaları) sağlar. OS'ye özgü TFM'ler ayrıca temel TFM'leri (örneğin, TFM) tarafından kullanılabilen her API'yi net5.0 devralabilir.

.NET 5; WinForms, WPF ve UWP API'leri Windows bağlamaları içeren işletim sistemine özgü net5.0-windows TFM'yi tanıttı. .NET 6 işletim sistemine özgü daha fazla TFM'yi tanıtıyor.

Aşağıdaki tabloda .NET 5+ TFM'lerinin uyumluluğu gösterir.

TFM ile uyumludur
net5.0 net1.. 4 (NU1701 uyarısıyla)
netcoreapp1.. 3.1 (WinForms veya WPF başvurusu olduğunda uyarı)
netstandard1.. 2.1
net5.0-windows netcoreapp1.. 3.1 (artı'dan devralınan diğer her net5.0 şey)
net6.0 (sonraki net5.0 sürümü)
net6.0-android xamarin.android (+'dan devralınan diğer her net6.0 şey)
net6.0-ios xamarin.ios (+'dan devralınan diğer her net6.0 şey)
net6.0-macos xamarin.mac (+'dan devralınan diğer her net6.0 şey)
net6.0-maccatalyst xamarin.ios (+'dan devralınan diğer her net6.0 şey)
net6.0-tvos xamarin.tvos (+'dan devralınan diğer her net6.0 şey)
net6.0-windows (sonraki net5.0-windows sürümü)

Uygulamalarınızı farklı platformlar arasında taşınabilir hale getirin ancak işletim sistemine özgü API'lere erişmeye devam edin. Önişlemci yönergelerini kullanarak işletim sistemine özgü birden çok TFM'yi hedefler ve işletim sistemine özgü API çağrılarının çevresinde platform korumaları #if eklersiniz.

Önerilen hedefler

Uygulamanıza hangi TFM'nin kullanılabını belirlemek için bu yönergeleri kullanın:

  • Birden çok platforma taşınabilir uygulamalar, örneğin, temel bir TFM'i net5.0 hedeflemeli. Buna çoğu kitaplık dahil ancak aynı zamanda ASP.NET Core ve Entity Framework.

  • Platforma özgü kitaplıklar platforma özgü özellikleri hedeflemeli. Örneğin, WinForms ve WPF projeleri veya 'i net5.0-windows net6.0-windows hedeflemeli.

  • Platformlar arası uygulama modelleri (Xamarin Forms, ASP.NET Core) ve köprü paketleri (Xamarin Essentials) en azından temel TFM'i (örneğin, ) hedeflemeli, ancak daha fazla API veya özelliği hafifletme için platforma özgü ek özellikleri de net6.0 hedefleyebebilir.

TFM'lerde işletim sistemi sürümü

Ayrıca işletim sistemine özgü bir TFM'nin sonunda isteğe bağlı bir işletim sistemi sürümü de belirtabilirsiniz, örneğin, net6.0-ios15.0 . Sürüm, uygulama veya kitaplığınız için hangi API'lerin kullanılabilir olduğunu gösterir. Çalışma zamanında, uygulama veya kitaplığınız tarafından desteklene işletim sistemi sürümünü denetlemez. Projenizin derlediği başvuru derlemelerini seçmek ve projenizin paketlerinden varlıkları seçmek NuGet kullanılır. Bu sürümü, çalışma zamanı işletim sistemi sürümünden farklı olarak "platform sürümü" veya "OS API sürümü" olarak düşünebilirsiniz.

OS'ye özgü bir TFM platform sürümünü açıkça belirtmezse, temel TFM'den ve platform adı'dan gelen örtülü bir değere sahip olur. Örneğin, .NET 6'da iOS için varsayılan platform değeri, kurallı 15.0 net6.0-ios TFM'nin kısa olduğu net6.0-ios15.0 anlamına gelir. Daha yeni bir temel TFM için örtülü platform sürümü daha yüksek olabilir, örneğin, gelecekteki net7.0-ios bir TFM ile eş net7.0-ios16.0 olabilir. Bu kısa form yalnızca proje dosyalarında kullanılmak üzere tasarlanmıştır ve .NET SDK'sı MSBuild hedefleri tarafından kurallı biçime genişletilir. Bu hedef, NuGet gibi diğer araçlara geçirilmelidir.

.NET SDK, temel TFM'nin yeni bir sürümü olmadan tek bir platform için yeni yayınlanan API'leri destekleyecek şekilde tasarlanmıştır. Bu, .NET'in önemli bir sürümü için beklemeden platforma özgü işlevlere erişmeye olanak sağlar. TFM'de platform sürümünü artırarak bu yeni yayınlanan API'lere erişim elde edin. Örneğin, iOS platformu bir .NET 6.0.x SDK güncelleştirmesinde iOS 15.1 API'leri eklediyse, TFM kullanarak bu API'lere net6.0-ios15.1 erişebilirsiniz.

Eski işletim sistemi sürümlerini destekleme

Platforma özgü bir uygulama veya kitaplık, o işletim sistemi sürümünün belirli bir sürümünden API'lere karşı derlenmiş olsa da, proje dosyanıza özelliğini ekleyerek önceki işletim sistemi sürümleriyle uyumlu SupportedOSPlatformVersion hale getirin. özelliği, SupportedOSPlatformVersion uygulama 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ü kullanılır.

Uygulamanın daha eski bir işletim sistemi sürümünde düzgün çalışması için işletim sistemi sürümünde mevcut olmayan API'leri çağıramayabilirsiniz. Bununla birlikte, yeni API'lere çağrılar çevresinde korumalar ekleyebilir, bu nedenle yalnızca onları destekleyen bir işletim sistemi sürümünde çalıştırıldıklarında çağrılırlar. Bu düzen, daha yeni işletim sistemi sürümlerinde çalışırken daha yeni işletim sistemi işlevlerinden faydalanırken, uygulama veya kitaplığınızı eski işletim sistemi sürümlerinde çalıştırmayı destekleyecek şekilde tasarlamanıza olanak sağlar.

Değeri (açık veya varsayılan) platform uyumluluk çözümleyicisi tarafından kullanılır. Bu çözümleyici, daha yeni API'lere yapılan korumasız çağrıları algılar SupportedOSPlatformVersion ve uyarıyor. Platform uyumluluğu çözümleyicisi, daha düşük bir değere sahip projelerden o derlemenin API'lerine yönelik korumasız çağrıları algılayamalarını için projenin derlenmiş derlemesine bir derleme özniteliği olarak merak UnsupportedOSPlatformAttribute SupportedOSPlatformVersion edilir. Bazı platformlarda, değer platforma özgü uygulama paketleme ve derleme işlemlerini etkiler ve bu platformların SupportedOSPlatformVersion belgelerinde ele alınmıştır.

Uygulamanın veya kitaplığın iOS 15.0 API'lerine erişimi olduğunu belirtmek için ve MSBuild özelliklerini kullanan ancak TargetFramework iOS 13.0 ve üzerinde çalıştırmayı destekleyen bir proje dosyasının örnek alıntısı SupportedOSPlatformVersion şöyledir:

<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 belirtilirse TargetFramework öğesini kullanın. Aşağıdaki konsol uygulaması proje dosyası .NET 5'i hedeflemeyi gösteriyor:

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

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

</Project>

Birden çok hedef çerçeve belirttiğinizde, her hedef çerçeve için derlemelere koşullu olarak başvurarak. Kodunda, if-then-else mantığıyla önişlemci sembollerini kullanarak bu derlemelere karşı koşullu olarak derlemeler oluşturabilirsiniz.

Aşağıdaki kitaplık projesi, .NET Standard ( ) ve .NET Framework netstandard1.4 ( ve ) API'lerini net40 net45 hedefler. Birden çok hedef çerçeve ile çoğul TargetFrameworks öğesini kullanın. ConditionÖznitelikler, kitaplık TFM'ler için derlenmiş olan uygulamaya .NET Framework 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ız veya uygulamanız içinde, her hedef çerçeve için derlemek için önişlemci yönergelerini kullanarak koşullu kod yazarsanı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
    }
}

Derleme sistemi, SDK stili projeleri kullanırken Desteklenen hedef çerçeve sürümleri tablosunda gösterilen hedef çerçeveleri temsil eden ön işlemci sembollerini biliyor. .NET Standard, .NET Core veya .NET 5 TFM'yi temsil eden bir simge kullanırken, noktaları ve kısa çizgileri bir alt çizgi ile değiştirin ve küçük harfleri büyük harfle değiştirin (örneğin, netstandard1.4 NETSTANDARD1_4 simgesidir).

.NET hedef çerçeveleri için ön işlemci sembollerinin tam listesi şu şekildedir:

Hedef Çerçeveler Simgeleri .NET 5 + SDK 'da kullanılabilen ek simgeler
.NET Framework NETFRAMEWORK, NET48, NET472, NET471, NET47, NET462, NET461, NET46, NET452, NET451, NET45, NET40, NET35, NET20 NET48_OR_GREATER, NET472_OR_GREATER, NET471_OR_GREATER, NET47_OR_GREATER, NET462_OR_GREATER, NET461_OR_GREATER, NET46_OR_GREATER, NET452_OR_GREATER, NET451_OR_GREATER, NET45_OR_GREATER, NET40_OR_GREATER, NET35_OR_GREATER, NET20_OR_GREATER
.NET Standard NETSTANDARD, NETSTANDARD2_1, NETSTANDARD2_0, 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, NET6_0, NET6_0_ANDROID, NET6_0_IOS, NET6_0_MACOS, NET6_0_MACCATALYST, NET6_0_TVOS, NET6_0_WINDOWS, NET5_0, NETCOREAPP, NETCOREAPP3_1, NETCOREAPP3_0, NETCOREAPP2_2, NETCOREAPP2_1, NETCOREAPP2_0, NETCOREAPP1_1, NETCOREAPP1_0 NET6_0_OR_GREATER, NET6_0_ANDROID_OR_GREATER, NET6_0_IOS_OR_GREATER, NET6_0_MACOS_OR_GREATER, NET6_0_MACCATALYST_OR_GREATER, NET6_0_TVOS_OR_GREATER, NET6_0_WINDOWS_OR_GREATER, NET5_0_OR_GREATER, NETCOREAPP_OR_GREATER, NETCOREAPP3_1_OR_GREATER, NETCOREAPP3_0_OR_GREATER, NETCOREAPP2_2_OR_GREATER, NETCOREAPP2_1_OR_GREATER, NETCOREAPP2_0_OR_GREATER, NETCOREAPP1_1_OR_GREATER, NETCOREAPP1_0_OR_GREATER

Not

  • Versionless sembolleri, hedeflediğiniz sürümden bağımsız olarak tanımlanmıştır.
  • Sürüme özgü semboller yalnızca hedeflediğiniz sürüm için tanımlanmıştır.
  • <framework>_OR_GREATERSemboller, hedeflediğiniz sürüm ve önceki tüm sürümler için tanımlanır. örneğin, .NET Framework 2,0 ' i hedefliyorsanız, aşağıdaki semboller tanımlanmıştır: NET_2_0 , NET_2_0_OR_GREATER , NET_1_1_OR_GREATER ve NET_1_0_OR_GREATER .

Kullanım dışı hedef çerçeveler

Aşağıdaki hedef çerçeveler kullanım dışıdır. Bu hedef çerçeveleri hedef alan paketler, belirtilen değiştirmelere geçirilir.

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 UAP 10.0
kazanırsınız netcore45
Win8 netcore45
win81 netcore451
win10 UAP 10.0
wınrt netcore45

Ayrıca bkz.