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.0hedeflemeli. 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-windowsnet6.0-windowshedeflemeli.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.0hedefleyebebilir.
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_GREATERveNET_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.
- .NET 5 ' te hedef çerçeve adları
- masaüstü uygulamalarında Windows Çalışma Zamanı apı 'leri çağırma
- Platformlar Arası Araçlarla Kitaplık Geliştirme
- .NET Standard
- .NET Core sürümü oluşturma
- dotnet/standart GitHub deposu
- NuGet araçları GitHub deposu
- .NET 'teki Framework profilleri
- Platform uyumluluk çözümleyicisi