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.0
Windows 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
.
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.0
, net8.0
ve 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.
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.0 her şey ) |
net6.0 |
(Sonraki sürümü net5.0 ) |
net6.0-android |
xamarin.android (artı olarak, öğesinden devralınan net6.0 diğ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.0 diğ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.0
kurallı 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.0
eş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.0
kullanarak 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-ios
net6.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 9'un nasıl hedeflen olduğu gösterilmektedir:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net9.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 , NET481 , NET48 , , NET472 , NET471 , NET47 , , NET462 , NET461 , NET46 , NET452 , NET451 , NET35 NET45 NET40 ,NET20 |
NET48_OR_GREATER , , NET471_OR_GREATER , , NET47_OR_GREATER , NET462_OR_GREATER , NET461_OR_GREATER , , NET46_OR_GREATER , NET452_OR_GREATER , NET45_OR_GREATER NET451_OR_GREATER , NET35_OR_GREATER NET40_OR_GREATER , NET472_OR_GREATER NET20_OR_GREATER |
|
.NET Standard | NETSTANDARD , , NETSTANDARD2_0 NETSTANDARD2_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 , NET9_0 , NET8_0 , , NET7_0 , NET6_0 , NET5_0 , , NETCOREAPP , NETCOREAPP3_1 , NETCOREAPP3_0 NETCOREAPP2_2 , NETCOREAPP2_0 NETCOREAPP2_1 , NETCOREAPP1_1 ,NETCOREAPP1_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_GREATER NETCOREAPP2_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_GREATER
veNET10_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 |