.NET 5 を対象とする場合の NETCOREAPP3_1 プリプロセッサ シンボルが定義されていない
.NET 5 RC2 以降のバージョンでは、プロジェクトでのプリプロセッサ シンボルの定義は対象とするバージョンに対してのみ行われ、以前のバージョンでは行われなくなります。 これは、.NET Core 1.0 - 3.1 と同じ動作です。
導入されたバージョン
5.0 RC2
変更内容
.NET 5 Preview 7 から RC1 では、net5.0
を対象とするプロジェクトで NETCOREAPP3_1
と NET5_0
の両方のプリプロセッサ シンボルが定義されます。 この動作変更は、.NET 5 以降で、条件付きコンパイルのシンボルが累積になることを意図したものでした。
.NET 5 RC2 以降では、プロジェクトは、以前のバージョンではなく、対象となるターゲット フレームワーク モニカー (TFM) のみに対するシンボルを定義します。
変更理由
Preview 7 からの変更は、お客様からのフィードバックにより元に戻されました。 以前のバージョンのシンボルの定義はお客様を驚かせ、混乱させました。C# のコンパイラにバグがあったと考えたお客様もいました。
推奨アクション
プロジェクトが net5.0
以上を対象とするときに NETCOREAPP3_1
が定義されていることを #if
ロジックで前提としていないことを確認してください。 代わりに、プロジェクトが netcoreapp3.1
を明示的に対象としている場合は NETCOREAPP3_1
のみが定義されることを前提としてください。
たとえば、プロジェクトが .NET Core 2.1 および .NET Core 3.1 のマルチターゲットで、.NET Core 3.1 で導入された API を呼び出す場合、#if
ロジックは次のようになります。
#if NETCOREAPP2_1 || NETCOREAPP3_0
// Fallback behavior for old versions.
#elif NETCOREAPP
// Behavior for .NET Core 3.1 and later.
#endif
影響を受ける API
該当なし
.NET
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示