Bagikan melalui


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#.

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