.NET Core 2.1 の破壊的変更Breaking changes in .NET Core 2.1

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

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

パス API から、無効な文字に対する例外はスローされませんPath APIs don't throw an exception for invalid characters

ファイル パスを必要とする API では、パス文字の検証も、無効な文字が見つかった場合の `M:System.ArgumentException> のスローも行わなくなりました。APIs that involve file paths no longer validate path characters or throw an `M:System.ArgumentException> if an invalid character is found.

変更の説明Change description

.NET Framework と .NET Core 1.0 - 2.0 では、パス引数に無効なパス文字が含まれている場合、影響を受ける API セクションにリストされているメソッドからは、ArgumentException がスローされます。In .NET Framework and .NET Core 1.0 - 2.0, the methods listed in the Affected APIs section throw an ArgumentException if the path argument contains an invalid path character. .NET Core 2.1 以降、これらのメソッドでは、無効なパス文字をチェックすることも、無効な文字が見つかった場合に例外をスローすることも行われなくなりました。Starting in .NET Core 2.1, these methods no longer check for invalid path characters or throw an exception if an invalid character is found.

変更理由Reason for change

パス文字を積極的に検証すると、一部のクロスプラットフォーム シナリオがブロックされます。Aggressive validation of path characters blocks some cross-platform scenarios. この変更は、オペレーティング システムの API 呼び出しの結果をレプリケートまたは予測する試みが .NET によって行われないようにするために導入されました。This change was introduced so that .NET does not try to replicate or predict the outcome of operating system API calls. 詳細については、ブログ記事「.NET Core 2.1 の System.IO の先行プレビュー」を参照してください。For more information, see the System.IO in .NET Core 2.1 sneak peek blog post.

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

.NET Core 2.1.NET Core 2.1

ご利用のコードが無効な文字のチェックする上で、これらの API に依存していた場合は、Path.GetInvalidPathChars の呼び出しを追加できます。If your code relied on these APIs to check for invalid characters, you can add a call to Path.GetInvalidPathChars.

影響を受ける APIAffected APIs

関連項目See also


組み込みの構造体型に追加されたプライベート フィールド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


MSBuildMSBuild

プロジェクト ツールが SDK に追加されましたProject tools now included in SDK

.NET Core 2.1 SDK に一般的な CLI ツールが追加されました。これらのツールをプロジェクトから参照する必要がなくなりました。The .NET Core 2.1 SDK now includes common CLI tooling, and you no longer need to reference these tools from the project.

変更内容Change description

.NET Core 2.0 では、<DotNetCliToolReference> プロジェクト設定で外部 .NET ツールがプロジェクトによって参照されます。In .NET Core 2.0, projects reference external .NET tools with the <DotNetCliToolReference> project setting. .NET Core 2.1 では、これらのツールの一部が .NET Core SDK に付属します。この設定は不要になりました。In .NET Core 2.1, some of these tools are included with the .NET Core SDK, and the setting is no longer needed. プロジェクトにこれらのツールへの参照を含めると、"ツール 'Microsoft.EntityFrameworkCore.Tools.DotNet' は .NET Core SDK に付属するようになりました" のようなエラーが届きます。If you include references to these tools in your project, you'll receive an error similar to the following: The tool 'Microsoft.EntityFrameworkCore.Tools.DotNet' is now included in the .NET Core SDK.

.NET Core 2.1 SDK に追加されたツール:Tools now included in .NET Core 2.1 SDK:

<DotNetCliToolReference> 値<DotNetCliToolReference> value ツールTool
Microsoft.DotNet.Watcher.Tools dotnet-watch
Microsoft.Extensions.SecretManager.Tools dotnet-user-secretsdotnet-user-secrets
Microsoft.Extensions.Caching.SqlConfig.Tools dotnet-sql-cachedotnet-sql-cache
Microsoft.EntityFrameworkCore.Tools.DotNet dotnet-efdotnet-ef

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

.NET Core SDK 2.1.300.NET Core SDK 2.1.300

プロジェクトから <DotNetCliToolReference> 設定を削除します。Remove the <DotNetCliToolReference> setting from your project.

カテゴリCategory

MSBuildMSBuild

影響を受ける APIAffected APIs

N/AN/A