Критические изменения в .NET 8

Если вы переносите приложение на .NET 8, критические изменения, перечисленные здесь, могут повлиять на вас. Изменения сгруппированы по технологическим областям, например, ASP.NET Core или Windows Forms.

Эта статья классифицирует каждое критическое изменение как двоично несовместимое или исходно несовместимое, или как изменение поведения:

  • Двоичная несовместимость - При запуске в новой среде выполнения или компоненте существующие двоичные файлы могут столкнуться с критическим изменением поведения, например сбоем загрузки или выполнения, и, в таком случае, требуют повторной компиляции.

  • Несовместимый источник. При повторной компиляции с помощью нового пакета SDK или компонента или целевой среды выполнения существующий исходный код может требовать изменения источника для успешной компиляции.

  • Изменение поведения. Существующий код и двоичные файлы могут вести себя по-разному во время выполнения. Если новое поведение нежелательно, необходимо обновить и перекомпилировать существующий код.

ASP.NET Core

См. критические изменения в ASP.NET Core 8.

Контейнеры

Заголовок Тип изменения
Пакет ca-certificates удален из образов Alpine Двоичная несовместимость
Образы контейнеров Debian обновлены до Debian 12 Двоичные несовместимые или поведенческие изменения
По умолчанию порт ASP.NET Core изменен на 8080 изменение поведения;
Пакет Kerberos удален из образов Alpine и Debian Двоичная несовместимость
Пакет libintl удален из образов Alpine изменение поведения;
Теги контейнеров с несколькими платформами доступны только для Linux изменение поведения;
Новый пользователь app в образах Linux изменение поведения;

Основные библиотеки .NET

Заголовок Тип изменения
Имя операции действия при значении NULL изменение поведения;
Поведение метода Dispose для AnonymousPipeServerStream изменение поведения;
Устаревание API с пользовательскими идентификаторами диагностики Несовместимый источник
Сопоставление обратной дроби в путях файловой системы Unix изменение поведения;
Методы Base64.DecodeFromUtf8 игнорируют пробелы изменение поведения;
Удалена поддержка перечисляемого типа на основе логического значения изменение поведения;
Формат Complex.ToString изменен на <a; b> изменение поведения;
Перечисление пути текущего каталога на диске изменение поведения;
Enumerable.Sum вызывает новое исключение OverflowException для некоторых вводов изменение поведения;
FileStream записывает данные при закрытии канала изменение поведения;
FindSystemTimeZoneById не возвращает новый объект изменение поведения;
GC. GetGeneration может возвращать Int32.MaxValue изменение поведения;
Поведение GetFolderPath в Unix изменение поведения;
GetSystemVersion больше не возвращает ImageRuntimeVersion изменение поведения;
Заметки iTypeDescriptorContext NULL Несовместимый источник
API LDAP недоступны в .NET Standard / .NET Framework Двоичная несовместимость
Удалена устаревшая Console.ReadKey изменение поведения;
Построитель методов создает параметры с параметром HasDefaultValue, равным false изменение поведения;
URI части пакета теперь сравниваются без учета регистра в System.IO.Packaging изменение поведения;
ProcessStartInfo.WindowStyle принимается во внимание, если UseShellExecute имеет значение false изменение поведения;
RuntimeIdentifier возвращает платформу, для которой была создана среда выполнения изменение поведения;
Type.GetType Создает исключение для всех недопустимых типов элементов изменение поведения;

Шифрование

Заголовок Тип изменения Введенный
Размер тега проверки подлинности AesGcm в macOS изменение поведения; Предварительная версия 1
Устаревшие RSA.EncryptValue и RSA.DecryptValue Несовместимый источник Предварительная версия 1

Развертывание

Заголовок Тип изменения
Участок определяет активы, связанные с RID Двоичные несовместимые или поведенческие изменения
Монитор .NET включает только дистрлесс образы изменение поведения;
Пакеты .NET для openSUSE и SLES зависят от OpenSSL 3.x изменение поведения;
По умолчанию stripSymbols имеет значение true изменение поведения;

Entity Framework Core (платформа для работы с базами данных)

См. критические изменения в EF Core 8.

Расширения

Заголовок Тип изменения
ActivatorUtilities.CreateInstance ведет себя согласованно изменение поведения;
ActivatorUtilities.CreateInstance требует ненулевого поставщика изменение поведения;
ConfigurationBinder автоматически пропускает недопустимые элементы массива изменение поведения;
ConfigurationBinder вызывает несовпадение значения изменение поведения;
Пакет ConfigurationManager больше не ссылается на System.Security.Permissions Несовместимый источник
Пакет DirectoryServices больше не ссылается на System.Security.Permissions Несовместимый источник
Пустые ключи, добавленные в словарь связывателем конфигурации изменение поведения;
FromKeyedServicesAttribute.Key может иметь значение NULL Несовместимый источник
Args в HostApplicationBuilderSettings учитываются в конструкторе HostApplicationBuilder изменение поведения;
ManagementDateTimeConverter.ToDateTime возвращает локальное время изменение поведения;
Изменение форматирования System.Format.Cbor DateTimeOffset изменение поведения;

Глобализация

Заголовок Тип изменения
Преобразователи даты и времени учитывают аргумент культуры изменение поведения;
Значение по умолчанию TwoDigitYearMax — 2049 изменение поведения;

Взаимодействие

Заголовок Тип изменения
CreateObjectFlags.Unwrap только распаковывается в целевом экземпляре изменение поведения;
Пользовательские маршаллеры требуют дополнительных членов Несовместимый источник
API IDispatchImplAttribute удален Бинарная несовместимость
Неявный открытый конструктор по умолчанию JSFunctionBinding удален Двоичная несовместимость
Типы SafeHandle должны иметь открытый конструктор Несовместимый источник
Разрешение собственной библиотеки Linux больше не используется netcoredeps изменение поведения;

Сеть

Заголовок Тип изменения
SendFile создает исключение NotSupportedException для сокетов без подключения изменение поведения;
Данные пользователя в mailto: URI сравниваются изменение поведения;

Отражение

Заголовок Тип изменения
IntPtr больше не используется для типов указателей функций изменение поведения;

Пакет SDK

Заголовок Тип изменения
Выходные данные консоли CLI используют UTF-8 Изменение поведения/ несовместимость исходного и двоичного файла
Кодировка консоли не является UTF-8 после завершения Изменение поведения, несовместимость на двоичном уровне
Контейнеры по умолчанию используют тег "latest" изменение поведения;
"dotnet pack" использует конфигурацию релиза Поведенческое изменение/несовместимый источник
"dotnet publish" использует конфигурацию Release Изменение поведения или несовместимый источник
Повторяющиеся выходные данные для -getItem, -getProperty и -getTargetResult изменение поведения;
Неявное using для System.Net.Http больше не добавлено Изменение поведения и несовместимый источник
Пользовательские события сборки, производные от MSBuild, устарели изменение поведения;
MSBuild учитывает DOTNET_CLI_UI_LANGUAGE изменение поведения;
Приложения, зависящие от среды выполнения, не автономные Несовместимость на уровне исходного кода и двоичного кода
Параметр --arch не подразумевает самодостаточность изменение поведения;
"dotnet restore" создает предупреждения об уязвимостях безопасности изменение поведения;
"Пакет списка dotnet" предупреждает, если источник не предоставляет данные об уязвимостях изменение поведения;
Пакет SDK использует меньший граф RID Изменение поведения/Несовместимый источник
Установка параметра debugSymbols в false отключает генерацию PDB изменение поведения;
Ссылка на источник, включенная в пакет SDK для .NET Несовместимый источник
Обрезка не может использоваться с .NET Standard или с .NET Framework изменение поведения;
Не указанные в списке пакеты, которые не устанавливаются по умолчанию для средств .NET изменение поведения;
Пользовательский файл, импортированный во внешних сборках изменение поведения;
Требования к версии пакета SDK для .NET 8 Несовместимый источник

Сериализация

Заголовок Тип изменения
BinaryFormatter отключен для большинства проектов изменение поведения;
В проектах типа PublishedTrimmed происходит сбой сериализации, основанной на отражении изменение поведения;
Десериализатор на основе отражения энергично обрабатывает метаданные изменение поведения;

Windows Forms

Заголовок Тип изменения
Сертификаты, проверенные перед загрузкой удаленных образов в PictureBox изменение поведения;
DateTimePicker.Text — пустая строка изменение поведения;
Свойство DefaultValueAttribute удалено из некоторых свойств изменение поведения;
Конструктор ExceptionCollection вызывает ArgumentException изменение поведения;
Масштаб форм в соответствии с AutoScaleMode изменение поведения;
ImageList.ColorDepth по умолчанию — Depth32Bit изменение поведения;
System.Windows.Extensions не ссылается на System.Drawing.Common Несовместимый источник
TableLayoutStyleCollection вызывает АргументException изменение поведения;
Минимальный и максимальный размер форм верхнего уровня изменяется в соответствии с DPI изменение поведения;
WFDEV002 объявление устаревшим теперь является ошибкой Несовместимый источник

См. также