バージョン 2.0 から 2.1 への移行の破壊的変更Breaking changes for migration from version 2.0 to 2.1

.NET Core のバージョン 2.0 からバージョン 2.1 に移行する場合、この記事の一覧にある破壊的変更がご使用のアプリに影響する可能性があります。If you're migrating from version 2.0 to version 2.1 of .NET Core, the breaking changes listed in this article may affect your app.

Core .NET ライブラリCore .NET libraries

組み込みの構造体型に追加されたプライベート フィールドPrivate fields added to built-in struct types

プライベート フィールドが参照アセンブリ特定の構造体型に追加されました。Private fields were added to certain struct types in reference assemblies. その結果、C# では、それらの構造体型は常に、new 演算子または default リテラルを使用してインスタンス化する必要があります。As a result, in C#, those struct types must always be instantiated by using the new operator or default literal.

変更の説明Change description

.NET Core 2.0 およびそれ以前のバージョンでは、一部の提供されている構造体型 (たとえば、ConsoleKeyInfo) を、C# で new 演算子や default リテラルを使用せずにインスタンス化できました。In .NET Core 2.0 and previous versions, some provided struct types, for example, ConsoleKeyInfo, could be instantiated without using the new operator or default literal in C#. これは、C# コンパイラーによって使用される参照アセンブリに、構造体のプライベート フィールドが含まれていなかったためです。This was because the reference assemblies used by the C# compiler didn't contain the private fields for the structs. .NET Core 2.1 以降、.NET 構造体型のすべてのプライベート フィールドが参照アセンブリに追加されます。All private fields for .NET struct types are added to the reference assemblies starting in .NET Core 2.1.

たとえば、次の C# コードは .NET Core 2.0 ではコンパイルされますが、.NET Core 2.1 ではされません。For example, the following C# code compiles in .NET Core 2.0, but not in .NET Core 2.1:

ConsoleKeyInfo key;    // Struct type

if (key.ToString() == "y")
{
    Console.WriteLine("Yes!");
}

.NET Core 2.1 では、以前のコードを使用すると、次のコンパイラー エラーが発生します。CS0165 - 未割り当てのローカル変数 'key' が使用されましたIn .NET Core 2.1, the previous code results in the following compiler error: CS0165 - Use of unassigned local variable 'key'

導入されたバージョンVersion introduced

2.12.1

new 演算子または default リテラルを使用して構造体型をインスタンス化します。Instantiate struct types by using the new operator or default literal.

次に例を示します。For example:

ConsoleKeyInfo key = new ConsoleKeyInfo();    // Struct type.

if (key.ToString() == "y")
    Console.WriteLine("Yes!");
ConsoleKeyInfo key = default;    // Struct type.

if (key.ToString() == "y")
    Console.WriteLine("Yes!");

カテゴリCategory

Core .NET ライブラリCore .NET libraries

影響を受ける APIAffected APIs


macOS 上の OpenSSL バージョンOpenSSL versions on macOS

macOS 上の .NET Core 3.0 以降のランタイムでは AesCcmAesGcmDSAOpenSslECDiffieHellmanOpenSslECDsaOpenSslRSAOpenSslSafeEvpPKeyHandle の各型に対して OpenSSL 1.0.x バージョンよりも OpenSSL 1.1.x バージョンが優先されるようになりました。The .NET Core 3.0 and later runtimes on macOS now prefer OpenSSL 1.1.x versions to OpenSSL 1.0.x versions for the AesCcm, AesGcm, DSAOpenSsl, ECDiffieHellmanOpenSsl, ECDsaOpenSsl, RSAOpenSsl, and SafeEvpPKeyHandle types.

.NET Core 2.1 ランタイムでは、OpenSSL 1.1.x バージョンがサポートされるようになりましたが、OpenSSL 1.0.x バージョンが引き続き優先されます。The .NET Core 2.1 runtime now supports OpenSSL 1.1.x versions, but still prefers OpenSSL 1.0.x versions.

変更の説明Change description

以前、.NET Core ランタイムでは、macOS 上の OpenSSL 1.0.x バージョンは OpenSSL とやりとりする型に対して使用されていました。Previously, the .NET Core runtime used OpenSSL 1.0.x versions on macOS for types that interact with OpenSSL. 最新の OpenSSL 1.0.x バージョンである OpenSSL 1.0.2 は現在サポートされていません。The most recent OpenSSL 1.0.x version, OpenSSL 1.0.2, is now out of support. サポートされているバージョンの OpenSSL 上で OpenSSL を使用する型を維持するために、.NET Core 3.0 以降のランタイムでは macOS 上でより新しいバージョンの OpenSSL が使用されるようになりました。To keep types that use OpenSSL on supported versions of OpenSSL, the .NET Core 3.0 and later runtimes now use newer versions of OpenSSL on macOS.

この変更により、macOS 上での .NET Core ランタイムの動作は次のようになります。With this change, the behavior for the .NET Core runtimes on macOS is as follows:

  • .NET Core 3.0 以降のバージョンのランタイムでは、使用可能な場合は OpenSSL 1.1.x が使用され、使用可能な 1.1.x バージョンがない場合にのみ OpenSSL 1.0.x にフォールバックします。The .NET Core 3.0 and later version runtimes use OpenSSL 1.1.x, if available, and fall back to OpenSSL 1.0.x only if there's no 1.1.x version available.

    カスタムの P/Invoke で OpenSSL 相互運用機能型を使用する呼び出し元については、SafeEvpPKeyHandle.OpenSslVersion の注釈にあるガイダンスに従ってください。For callers that use the OpenSSL interop types with custom P/Invokes, follow the guidance in the SafeEvpPKeyHandle.OpenSslVersion remarks. OpenSslVersion 値を確認しないと、ご利用のアプリがクラッシュする場合があります。Your app may crash if you don't check the OpenSslVersion value.

  • .NET Core 2.1 以降のバージョンのランタイムでは、使用可能な場合は OpenSSL 1.0.x が使用され、使用可能な 1.0.x バージョンがない場合にのみ OpenSSL 1.1.x にフォールバックします。The .NET Core 2.1 runtime uses OpenSSL 1.0.x, if available, and falls back to OpenSSL 1.1.x if there's no 1.0.x version available.

    .NET Core 2.1 には SafeEvpPKeyHandle.OpenSslVersion プロパティが存在しないため 2.1 ランタイムでは、以前のバージョンの OpenSSL が優先されます。結果として、実行時に OpenSSL のバージョンを確実に判断することができません。The 2.1 runtime prefers the earlier version of OpenSSL because the SafeEvpPKeyHandle.OpenSslVersion property does not exist in .NET Core 2.1, so the OpenSSL version cannot be reliably determined at run time.

導入されたバージョンVersion introduced

  • .NET Core 2.1.16.NET Core 2.1.16
  • .NET Core 3.0.3.NET Core 3.0.3
  • .NET Core 3.1.2.NET Core 3.1.2

カテゴリCategory

Core .NET ライブラリCore .NET libraries

影響を受ける APIAffected APIs