NETCOREAPP3_1 simbol pra-prosesor tidak ditentukan saat menargetkan .NET 5
Dalam .NET 5 RC2 dan versi yang lebih baru, proyek tidak lagi mendefinisikan simbol preprocessor untuk versi sebelumnya, tetapi hanya untuk versi yang mereka targetkan. Ini adalah perilaku yang sama dengan .NET Core 1.0 - 3.1.
Versi yang diperkenalkan
5.0 RC2
Deskripsi perubahan
Dalam .NET 5 pratinjau 7 hingga RC1, proyek yang menargetkan net5.0
mendefinisikan NETCOREAPP3_1
simbol prapemroseduran dan NET5_0
. Niat di balik perubahan perilaku ini adalah bahwa dimulai dengan .NET 5, simbol kompilasi kondisional akan bersifat kumulatif.
Di .NET 5 RC2 dan yang lebih baru, proyek hanya menentukan simbol untuk moniker kerangka kerja target (TFM) yang ditargetkannya dan bukan untuk versi sebelumnya.
Alasan untuk berubah
Perubahan dari pratinjau 7 dikembalikan karena umpan balik pelanggan. Menentukan simbol untuk versi sebelumnya pelanggan yang terkejut dan bingung, dan beberapa mengasumsikan itu adalah bug di pengompilasi C#.
Tindakan yang direkomendasikan
Pastikan logika Anda #if
tidak mengasumsikan net5.0
bahwa NETCOREAPP3_1
ditentukan saat proyek menargetkan atau lebih tinggi. Sebaliknya, asumsikan bahwa NETCOREAPP3_1
hanya ditentukan ketika proyek secara eksplisit menargetkan netcoreapp3.1
.
Misalnya, jika proyek Anda multitarget untuk .NET Core 2.1 dan .NET Core 3.1 dan Anda memanggil API yang diperkenalkan di .NET Core 3.1, logika Anda #if
akan terlihat sebagai berikut:
#if NETCOREAPP2_1 || NETCOREAPP3_0
// Fallback behavior for old versions.
#elif NETCOREAPP
// Behavior for .NET Core 3.1 and later.
#endif
API yang Terpengaruh
T/A
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk