Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Saat menargetkan kerangka kerja di aplikasi atau pustaka, Anda menentukan kumpulan API yang ingin Anda sediakan untuk aplikasi atau pustaka. Anda menentukan kerangka kerja target dalam file proyek Anda menggunakan moniker kerangka kerja target (TFM).
Aplikasi atau pustaka dapat menargetkan versi .NET Standard. Versi Standar .NET mewakili set API standar di semua implementasi .NET. Misalnya, pustaka dapat menargetkan .NET Standard 1.6 dan mendapatkan akses ke API yang berfungsi di .NET Core dan .NET Framework menggunakan basis kode yang sama.
Aplikasi atau pustaka juga dapat menargetkan implementasi .NET tertentu untuk mendapatkan akses ke API khusus implementasi. Misalnya, aplikasi yang menargetkan Universal Windows Platform (UWP, uap10.0) memiliki akses ke API yang dikompilasi untuk perangkat yang menjalankan Windows 10.
Untuk beberapa kerangka kerja target, seperti .NET Framework, API ditentukan oleh assembly yang diinstal kerangka kerja pada sistem dan dapat mencakup API kerangka kerja aplikasi (misalnya, ASP.NET).
Untuk kerangka kerja target berbasis paket (misalnya, .NET 5+, .NET Core, dan .NET Standard), API ditentukan oleh paket NuGet yang disertakan dalam aplikasi atau pustaka.
Versi terbaru
Tabel berikut mendefinisikan kerangka kerja target yang paling umum, bagaimana kerangka kerja target direferensikan, dan versi .NET Standard mana yang mereka terapkan. Versi kerangka kerja target ini adalah versi stabil terbaru. Versi prarilis tidak ditampilkan. Moniker kerangka kerja target (TFM) adalah format token standar untuk menentukan kerangka kerja target dari sebuah aplikasi atau pustaka .NET.
| Kerangka kerja target | Terbaru versi stabil |
Identitas kerangka kerja target (TFM) | Dilaksanakan Versi Standar .NET |
|---|---|---|---|
| .NET 10 | 10 | net10.0 | 2.1 |
| .NET 9 | 9 | net9.0 | 2.1 |
| .NET 8 | 8 | net8.0 | 2.1 |
| .NET Standar | 2.1 | netstandard2.1 | Tidak Berlaku |
| .NET Core | 3.1 | netcoreapp3.1 | 2.1 |
| .NET Framework | 4.8.1 | net481 | 2.0 |
Kerangka target yang didukung
Kerangka kerja target biasanya disebut sebagai TFM. Tabel berikut ini memperlihatkan kerangka kerja target yang didukung oleh .NET SDK dan klien NuGet. Setara ditampilkan dalam tanda kurung. Misalnya, win81 setara dengan TFM yang setara dengan netcore451.
| Kerangka Kerja Target | TFM |
|---|---|
| .NET 5+ (dan .NET Core) | netcoreapp1.0 netcoreapp1.1 netcoreapp2.0 netcoreapp2.1 netcoreapp2.2 netcoreapp3.0 netcoreapp3.1 net5.0* net6.0* net7.0* net8.0* net9.0* net10.0* |
| .NET Standar | 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 |
| Toko Windows | netcore [netcore45] netcore45 [win] [win8] netcore451 [win81] |
| .NET nanoFramework | netnano1.0 |
| .NET Kerangka kerja Mikro | netmf |
| Silverlight | sl4 sl5 |
| Windows Phone | wp [wp7] wp7 wp75 wp8 wp81 wpa81 |
| Platform Windows Universal | uap [uap10.0] uap10.0 [win10] [netcore50] |
* .NET 5 dan TFM yang lebih baru mencakup beberapa variasi khusus sistem operasi. Untuk informasi selengkapnya, lihat bagian berikut, TFM khusus OS.
TFM khusus OS
net8.0TFM , net9.0, dan net10.0 mencakup teknologi yang berfungsi di berbagai platform. Menentukan TFM khusus OS memungkinkan API yang spesifik untuk sistem operasi tersedia untuk aplikasi Anda, misalnya, Windows Forms atau pengikatan iOS. TFM khusus OS juga mewarisi setiap API yang tersedia untuk TFM dasar mereka, misalnya, net10.0 TFM.
Tabel berikut ini memperlihatkan kompatibilitas TFM .NET 8+.
| TFM | Kompatibel dengan |
|---|---|
net8.0 |
(Versi berikutnya dari net7.0) |
net8.0-android |
(Versi berikutnya dari net7.0-android) |
net8.0-browser |
Segala sesuatu yang diwariskan dari net8.0 |
net8.0-ios |
(Versi berikutnya dari net7.0-ios) |
net8.0-maccatalyst |
(Versi berikutnya dari net7.0-maccatalyst) |
net8.0-macos |
(Versi berikutnya dari net7.0-macos) |
net8.0-tizen |
(Versi berikutnya dari net7.0-tizen) |
net8.0-tvos |
(Versi berikutnya dari net7.0-tvos) |
net8.0-windows |
(Versi berikutnya dari net7.0-windows) |
net9.0 |
(Versi berikutnya dari net8.0) |
net9.0-android |
(Versi berikutnya dari net8.0-android) |
net9.0-browser |
(Versi berikutnya dari net8.0-browser) |
net9.0-ios |
(Versi berikutnya dari net8.0-ios) |
net9.0-maccatalyst |
(Versi berikutnya dari net8.0-maccatalyst) |
net9.0-macos |
(Versi berikutnya dari net8.0-macos) |
net9.0-tizen |
(Versi berikutnya dari net8.0-tizen) |
net9.0-tvos |
(Versi berikutnya dari net8.0-tvos) |
net9.0-windows |
(Versi berikutnya dari net8.0-windows) |
net10.0 |
(Versi berikutnya dari net9.0) |
net10.0-android |
(Versi berikutnya dari net9.0-android) |
net10.0-browser |
(Versi berikutnya dari net9.0-browser) |
net10.0-ios |
(Versi berikutnya dari net9.0-ios) |
net10.0-maccatalyst |
(Versi berikutnya dari net9.0-maccatalyst) |
net10.0-macos |
(Versi berikutnya dari net9.0-macos) |
net10.0-tizen |
(Versi berikutnya dari net9.0-tizen) |
net10.0-tvos |
(Versi berikutnya dari net9.0-tvos) |
net10.0-windows |
(Versi berikutnya dari net9.0-windows) |
Untuk membuat aplikasi Anda portabel di berbagai platform tetapi masih memiliki akses ke API khusus OS, Anda dapat menargetkan beberapa TFM khusus OS dan menambahkan pengaman platform untuk panggilan API khusus OS menggunakan #if arahan praprosesor. Untuk daftar simbol yang tersedia, lihat Simbol pra-prosesor.
Target yang disarankan
Gunakan panduan ini untuk menentukan TFM mana yang akan digunakan di aplikasi Anda:
- Aplikasi yang portabel ke beberapa platform harus menargetkan TFM dasar, misalnya,
net10.0. Ini termasuk sebagian besar pustaka tetapi juga ASP.NET Core dan Entity Framework. - Pustaka spesifik platform harus menargetkan varian spesifik platform. Misalnya, proyek WinForms dan WPF harus menargetkan
net10.0-windows. - Model aplikasi lintas platform (misalnya, ASP.NET Core) harus setidaknya menargetkan TFM dasar, seperti
net10.0. Namun, bisa juga menargetkan varian tambahan khusus platform untuk mengaktifkan lebih banyak API atau fitur.
Versi OS dalam TFMs
Anda juga dapat menentukan versi OS opsional di akhir TFM khusus OS, misalnya, net8.0-ios17.2. Versi menunjukkan API mana yang tersedia untuk aplikasi atau pustaka Anda. Ini tidak mengontrol versi OS yang didukung aplikasi atau pustaka Anda saat runtime. Ini digunakan untuk memilih perpustakaan referensi yang digunakan proyek Anda untuk kompilasi, dan untuk memilih aset dari paket NuGet. Anggap versi ini sebagai "versi platform" atau "versi OS API" untuk membedakannya dari versi OS runtime.
.NET SDK dirancang untuk dapat mendukung API yang baru dirilis untuk platform individual tanpa versi baru TFM dasar. Ini memungkinkan Anda mengakses fungsionalitas khusus platform tanpa menunggu rilis utama .NET. Anda dapat memperoleh akses ke API yang baru dirilis ini dengan menambah versi platform di TFM. Misalnya, jika platform Android menambahkan API level 34 API dalam pembaruan SDK .NET 8.0.x, Anda dapat mengaksesnya dengan menggunakan TFM net8.0-android34.0.
Ketika TFM khusus OS tidak menentukan versi platform secara eksplisit, TFM tersebut memiliki nilai tersirat yang dapat disimpulkan dari TFM dasar dan nama platform. Misalnya, versi platform default untuk Android di .NET 9 adalah 35.0, yang berarti bahwa net9.0-android adalah singkatan dari TFM standar net9.0-android35.0. Formulir singkatan dimaksudkan untuk digunakan dalam file proyek saja, dan diperluas ke bentuk kanonis oleh target MSBuild .NET SDK sebelum diteruskan ke alat lain, seperti NuGet.
Tabel berikut menunjukkan versi platform target (TPV) default untuk Android dan iOS untuk setiap rilis .NET. Jika Anda ingin menggunakan pengikatan terbaru, gunakan default (yaitu, jangan tentukan versi OS).
| Versi .NET | Android | Ios |
|---|---|---|
| .NET 8 | 34,0 | 17.2 |
| .NET 9 | 35,0 | 18,0 |
| .NET 10 | 36.0 | 18.7 |
Mulai dari .NET 9, ketika rilis layanan memperkenalkan dukungan untuk TPV yang lebih baru (yang akan selalu memiliki nomor versi utama yang sama seperti ketika versi .NET awalnya dirilis), TPV yang didukung paling awal untuk versi .NET tersebut akan tetap didukung. Misalnya, untuk .NET 9, versi iOS paling awal yang didukung, 18.0, akan tetap didukung, bahkan ketika rilis layanan menambahkan dukungan untuk versi iOS 18.x terbaru. Jika Anda perlu menggunakan pengikatan paling awal untuk rilis .NET, gunakan nomor versi OS tertentu di TFM Anda.
Catatan
Pada platform Apple (iOS, macOS, tvOS, dan Mac Catalyst) di .NET 8 dan yang lebih lama, TPV default adalah versi terbaru yang didukung dalam beban kerja yang saat ini diinstal. Itu berarti bahwa memperbarui beban kerja iOS di .NET 8, misalnya, dapat mengakibatkan TPV default yang lebih tinggi, jika dukungan untuk versi baru iOS telah ditambahkan dalam beban kerja tersebut. Dalam tabel sebelumnya, TPV default adalah versi dalam rilis awal untuk versi .NET yang dinyatakan.
Mulai dari .NET 9, perilaku khusus ini hanya berlaku untuk proyek yang dapat dieksekusi . TPV default untuk proyek pustaka sekarang tetap sama untuk keseluruhan rilis .NET utama, seperti semua platform lainnya.
Prioritas
Jika aplikasi Anda mereferensikan paket yang memiliki beberapa aset untuk TFM yang berbeda, aset yang lebih dekat dengan nomor versi lebih disukai. Misalnya, jika aplikasi Anda menargetkan net9.0-ios dan paket menawarkan aset untuk net9.0 dan net8.0-ios, net9.0 aset digunakan. Untuk informasi selengkapnya, lihat Prioritas.
Mendukung versi OS yang lebih lama
Meskipun aplikasi atau pustaka khusus platform dikompilasi terhadap API dari versi OS tertentu, Anda dapat membuatnya kompatibel dengan versi OS sebelumnya dengan menambahkan SupportedOSPlatformVersion properti ke file proyek Anda. Properti SupportedOSPlatformVersion menunjukkan versi OS minimum yang diperlukan untuk menjalankan aplikasi atau pustaka Anda. Jika Anda tidak secara eksplisit menentukan versi OS runtime minimum ini dalam proyek, versi tersebut default ke versi platform dari TFM.
Agar aplikasi Anda berjalan dengan benar pada versi OS yang lebih lama, aplikasi tidak dapat memanggil API yang tidak ada pada versi OS tersebut. Namun, Anda dapat menambahkan pengamanan di sekitar pemanggilan API yang lebih baru sehingga hanya dipanggil saat OS dijalankan pada versi yang mendukungnya. Pola ini memungkinkan Anda merancang aplikasi atau pustaka untuk mendukung berjalan pada versi OS yang lebih lama sambil memanfaatkan fungsionalitas OS yang lebih baru saat berjalan pada versi OS yang lebih baru.
Nilai SupportedOSPlatformVersion (baik eksplisit atau default) digunakan oleh penganalisis kompatibilitas platform, yang mendeteksi dan memperingatkan tentang panggilan yang tidak dijaga ke API yang lebih baru. Ini tertanam ke dalam assembly yang dikompilasi proyek sebagai atribut assembly UnsupportedOSPlatformAttribute, sehingga penganalisis kompatibilitas platform dapat mendeteksi panggilan tanpa perlindungan ke API assembly tersebut dari proyek dengan nilai yang lebih rendah SupportedOSPlatformVersion. Pada beberapa platform, nilai SupportedOSPlatformVersion tersebut memengaruhi proses pengemasan dan pembangunan aplikasi yang khusus untuk platform tersebut, yang dibahas dalam dokumentasi untuk platform-platform tersebut.
Contoh berikut adalah kutipan file proyek yang menggunakan TargetFramework properti MSBuild dan SupportedOSPlatformVersion untuk menentukan bahwa aplikasi atau pustaka memiliki akses ke API iOS 15.0 tetapi mendukung berjalan di iOS 13.0 dan yang lebih tinggi:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0-ios15.0</TargetFramework>
<SupportedOSPlatformVersion>13.0</SupportedOSPlatformVersion>
</PropertyGroup>
...
</Project>
Cara menentukan kerangka kerja target
Kerangka kerja target ditentukan dalam file proyek. Saat kerangka kerja target tunggal ditentukan, gunakan elemen TargetFramework. File proyek aplikasi konsol berikut menunjukkan cara menargetkan .NET 10:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net10.0</TargetFramework>
</PropertyGroup>
</Project>
Saat menentukan beberapa kerangka kerja target, Anda dapat mereferensikan rakitan secara kondisional untuk setiap kerangka kerja target. Dalam kode Anda, Anda dapat mengkompilasi secara kondisional terhadap rakitan tersebut dengan menggunakan simbol prapemrosesan dengan logika if-then-else .
Proyek pustaka berikut menargetkan API .NET Standard (netstandard1.4) dan .NET Framework (net40 dan net45). Gunakan elemen TargetFrameworks dalam bentuk jamak dengan beberapa kerangka kerja target. Atribut Condition termasuk paket khusus implementasi ketika pustaka dikompilasi untuk dua TFM pada .NET Framework:
<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>
Dalam pustaka atau aplikasi, Anda menulis kode kondisional menggunakan direktif pra-prosesor untuk dikompilasi untuk setiap kerangka kerja target:
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
}
}
Simbol prapemroscesor
Sistem build mengetahui simbol pra-prosesor yang mewakili kerangka kerja target yang ditampilkan dalam tabel Versi kerangka kerja target yang didukung saat Anda menggunakan proyek bergaya SDK. Untuk mengonversi .NET Standard, .NET Core, atau .NET 5+ TFM ke simbol praprosesor, ganti titik dan tanda hubung dengan garis bawah, dan ubah huruf kecil menjadi huruf besar (misalnya, simbol untuk netstandard2.0 adalah NETSTANDARD2_0).
Anda dapat menonaktifkan pembuatan simbol-simbol ini melalui DisableImplicitFrameworkDefines properti. Untuk informasi selengkapnya tentang properti ini, lihat DisableImplicitFrameworkDefines.
Daftar lengkap simbol pra-prosesor untuk kerangka kerja target .NET adalah:
| Kerangka Kerja Target | Simbol | Simbol tambahan (tersedia dalam .NET 5+ SDK) |
Simbol-simbol platform (tersedia hanya saat Anda menentukan TFM khusus OS) |
|---|---|---|---|
| .NET Framework |
NETFRAMEWORK, , NET481, NET48NET472, NET471, NET47, NET462, NET461, NET46, NET452, NET451, NET45, , NET40, NET35NET20 |
NET48_OR_GREATER, , NET472_OR_GREATERNET471_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_GREATERNET20_OR_GREATER |
|
| .NET Standar |
NETSTANDARD, NETSTANDARD2_1NETSTANDARD2_0, NETSTANDARD1_6, NETSTANDARD1_5, NETSTANDARD1_4, NETSTANDARD1_3, NETSTANDARD1_2, NETSTANDARD1_1,NETSTANDARD1_0 |
NETSTANDARD2_1_OR_GREATER, NETSTANDARD2_0_OR_GREATERNETSTANDARD1_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+ (dan .NET Core) |
NET, , NET10_0, NET9_0NET8_0, NET7_0, NET6_0, NET5_0, NETCOREAPP, NETCOREAPP3_1, NETCOREAPP3_0, NETCOREAPP2_2, NETCOREAPP2_1, , NETCOREAPP2_0, NETCOREAPP1_1NETCOREAPP1_0 |
NET10_0_OR_GREATER, , NET9_0_OR_GREATERNET8_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_GREATERNETCOREAPP1_0_OR_GREATER |
ANDROID, , BROWSERIOS, MACCATALYST, MACOS, TVOS, , WINDOWS,[OS][version] (misalnya IOS15_1),[OS][version]_OR_GREATER (misalnya IOS15_1_OR_GREATER) |
Catatan
- Simbol tanpa versi didefinisikan tanpa memperhatikan versi yang Anda targetkan.
- Simbol khusus versi hanya ditentukan untuk versi yang Anda targetkan.
- Simbol
<framework>_OR_GREATERditentukan untuk versi yang Anda targetkan dan semua versi sebelumnya. Misalnya, jika Anda menargetkan .NET Framework 2.0, simbol berikut ditentukan:NET20,NET20_OR_GREATER,NET11_OR_GREATER, danNET10_OR_GREATER. - Simbol
NETSTANDARD<x>_<y>_OR_GREATERhanya didefinisikan untuk target .NET Standard, dan bukan untuk target yang mengimplementasikan .NET Standard, seperti .NET Core dan .NET Framework. - Ini berbeda dari moniker kerangka kerja target (TFM) yang digunakan dalam properti MSBuild
TargetFrameworkdan NuGet.
Kerangka kerja target yang tidak lagi digunakan
Kerangka kerja target berikut tidak digunakan lagi. Paket yang menargetkan kerangka kerja target ini harus bermigrasi ke pengganti yang ditunjukkan.
| TFM yang tidak digunakan lagi | Penggantian |
|---|---|
| aspnet50 aspnetcore50 dnxcore50 dnx dnx45 dnx451 dnx452 |
netcoreapp |
| dotnet dotnet50 dotnet51 dotnet52 dotnet53 dotnet54 dotnet55 dotnet56 |
netstandard |
| netcore50 | uap10.0 |
| menang | netcore45 |
| Windows 8 | netcore45 |
| Windows 8.1 | netcore451 |
| Windows 10 | uap10.0 |
| winrt | netcore45 |
Lihat juga
- Nama Kerangka Target di .NET 5
- .NET Standar
- Penerapan versi .NET
- Informasi rilis Windows 11