Критические изменения для перехода с версии 2.0 на 2.1Breaking changes for migration from version 2.0 to 2.1

Если вы выполняете миграцию с версии 2.0 на версию 2.1 .NET Core, учитывайте критические изменения, перечисленные в этой статье, так как они могут влиять на работу приложения.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 .NETCore .NET libraries

Частные поля, добавленные во встроенные типы структурPrivate fields added to built-in struct types

Частные поля добавлены в некоторые типы структур в ссылочных сборках.Private fields were added to certain struct types in reference assemblies. В результате в C# эти типы структуры всегда должны создаваться с помощью оператора new или литерала по умолчанию.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 или литерала по умолчанию.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 добавляются в ссылочные сборки, начиная с .NET Core 2.1.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 — использование локальной переменной "name", которой не присвоено значение "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 или литерала по умолчанию.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 .NETCore .NET libraries

Затронутые APIAffected APIs


Версии OpenSSL в macOSOpenSSL versions on macOS

В среде выполнения .NET Core 3.0 и более поздних версий в macOS вместо версий OpenSSL 1.0.x для типов AesCcm, AesGcm, DSAOpenSsl, ECDiffieHellmanOpenSsl, ECDsaOpenSsl, RSAOpenSsl и SafeEvpPKeyHandle теперь предпочтительно использовать версии 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 для типов, которые взаимодействуют с OpenSSL, использовались версии OpenSSL 1.0.x в macOS.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 и более поздних версий теперь используются более новые версии OpenSSL в macOS.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.

В связи с этим изменением поведение сред выполнения .NET Core в macOS теперь реализуется следующим образом.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.

    Для вызывающих объектов, использующих типы взаимодействия OpenSSL с пользовательскими методами P/Invoke, необходимо следовать указаниям в примечаниях 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.

    В среде выполнения версии 2.1 предпочтительно использовать более раннюю версию OpenSSL, поскольку в .NET Core 2.1 отсутствует свойство SafeEvpPKeyHandle.OpenSslVersion, в связи с чем во время выполнения невозможно гарантированно определить версию 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 .NETCore .NET libraries

Затронутые APIAffected APIs