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

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

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

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

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

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

Замечание

Эта статья находится в процессе написания. Это не полный список критических изменений в .NET 10.

ASP.NET Core

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

Containers

Название Тип изменения
Образы .NET по умолчанию используют Ubuntu Изменение поведения
Для dotnet test в контейнерах требуется записываемый базовый каталог артефактов VSTest Изменение поведения

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

Название Тип изменения
Устаревание API Несовместимый источник
Изменение поведения ActivitySource.CreateActivity и ActivitySource.StartActivity Изменение поведения
Для неаварийных загрузок Arm64 SVE требуется маска Несовместимый двоичный или исходный код
BufferedStream.WriteByte больше не выполняет неявный сброс Изменение поведения
Разрешение перегрузки C# 14 с параметрами Span Изменение поведения
Согласованное поведение сдвигов в обобщённой математике Изменение поведения
Распространение контекста трассировки по умолчанию обновлено до стандарта W3C Изменение поведения
DriveInfo.DriveFormat возвращает типы файловой системы Linux Изменение поведения
Аннотация DynamicallyAccessedMembers удалена из конструктора DefaultValueAttribute Несовместимый двоичный или исходный код
Явный размер структуры запрещен с InlineArray Бинарно несовместимый
FilePatternMatch.Stem изменен на не допускающее значения null Изменение, несовместимое с источником/поведенческое изменение
GnuTarEntry и PaxTarEntry больше не включают atime и ctime по умолчанию Изменение поведения
Разбор LDAP DirectoryControl теперь более строгий Изменение поведения
Нормализация версий MacCatalyst Изменение поведения
Именованные мьютексы в Unix по умолчанию имеют область пользователя Изменение поведения
.NET среда выполнения больше не предоставляет обработчики сигналов завершения по умолчанию Изменение поведения
System.Linq.AsyncEnumerable включен в основные библиотеки Несовместимый источник
Проверка аргумента Type.MakeGenericSignatureType Изменение поведения

Cryptography

Название Тип изменения
CompositeMLDsa обновлен до draft-08 Изменение поведения
CoseSigner.Key может иметь значение NULL Несовместимое изменение поведения и источника
Члены MLDsa и SlhDsa 'SecretKey' переименованы Несовместимый источник
Криптографические примитивы OpenSSL не поддерживаются в macOS Изменение поведения
Требуется OpenSSL версии 1.1.1 или новее в системах Unix Изменение поведения
Проверка X500DistinguishedName является более строгой Изменение поведения
Параметры ключа X509Certificate и PublicKey могут иметь значение NULL Несовместимое изменение поведения и источника
Переменная среды переименована в DOTNET_OPENSSL_VERSION_OVERRIDE Изменение поведения

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

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

Extensions

Название Тип изменения
BackgroundService выполняет весь метод ExecuteAsync как задачу Изменение поведения
Устранение проблем в GetKeyedService() и GetKeyedServices() при использовании AnyKey Изменение поведения
Значения NULL сохраняются в конфигурации Изменение поведения
Сообщение больше не дублируется в выходных данных журнала консоли Изменение поведения
ProviderAliasAttribute перемещен в сборку Microsoft.Extensions.Logging.Abstractions Несовместимый источник
Удалена аннотация DynamicallyAccessedMembers из небезопасного для тримминга кода Microsoft.Extensions.Configuration Бинарно несовместимый

Globalization

Название Тип изменения
Переменная среды переименована в DOTNET_ICU_VERSION_OVERRIDE Изменение поведения

Средство установки

Название Тип изменения
API dotnet.acquire для VS Code больше не всегда загружает последнюю версию Изменение поведения

Interop

Название Тип изменения
Приведение объекта IDispatchEx COM к IReflect завершается ошибкой Изменение поведения
Однофайловые приложения больше не ищут собственные библиотеки в исполняемом каталоге Изменение поведения
Указание DllImportSearchPath.AssemblyDirectory выполняет поиск только в каталоге сборки. Изменение поведения

Нетворкинг

Название Тип изменения
Поддержка HTTP/3 по умолчанию отключена при использовании PublishTrimmed Несовместимый источник
MailAddress применяет проверку для последовательных точек Изменение поведения
Потоковая передача HTTP-ответов включена по умолчанию в HTTP-клиентах браузера Изменение поведения
Uri Ограничения длины удалены Изменение поведения

Reflection

Название Тип изменения Представленная версия
Более ограниченные заметки в InvokeMember/FindMembers/DeclaredMembers Несовместимость поведенческой модели и исходного кода
Проверка аргумента Type.MakeGenericSignatureType Изменение поведения

SDK и MSBuild

Название Тип изменения
.NET CLI --interactive по умолчанию выбирает true в пользовательских сценариях Изменение поведения
dotnet Команды CLI регистрируют данные, не относящиеся к командам, в stderr Изменение поведения
упаковка инструментов .NET создает пакеты инструментов для конкретных RuntimeIdentifier Изменение поведения
Изменение конфигурации рабочей нагрузки по умолчанию: от "свободных манифестов" к режиму "наборы рабочих нагрузок" Изменение поведения
DefineConstants для целевых фреймворков, недоступных во время оценки Изменение поведения
Покрытие кода EnableDynamicNativeInstrumentation по умолчанию равно false Изменение поведения
Скрипты dnx обходят выбор SDK в global.json Изменение поведения
файлdnx.ps1 больше не включен в пакет SDK .NET Несовместимый источник
Двойные кавычки в директивах уровня файлов запрещены Несовместимый источник
dotnet new sln По умолчанию используется формат файла SLNX Изменение поведения
dotnet package list выполняет восстановление Изменение поведения
dotnet restore проверяет транзитивные пакеты Изменение поведения
dotnet tool install --local создает манифест по умолчанию Изменение поведения
dotnet watch выводит сообщения в stderr вместо stdout Изменение поведения
project.json не поддерживается в dotnet restore Несовместимый источник
Поддержка отпечатков SHA-1 устарела в dotnet nuget sign Изменение поведения
MSBUILDCUSTOMBUILDEVENTWARNING аварийный обходной путь удален Изменение поведения
Обработка ресурсов пользовательской культуры MSBuild Изменение поведения
NU1510 выдается для прямых ссылок, обрезаемых NuGet Несовместимый источник
Пакеты NuGet без ресурсов среды выполнения не включены в deps.json Несовместимый источник
PackageReference без версии вызывает ошибку Изменение поведения
PrunePackageReference приватизирует прямые ссылки, подлежащие удалению Изменение поведения
Предупреждения HTTP повышены до ошибок в dotnet package list и dotnet package search Несовместимое изменение поведения и источника
удалена переменная среды NUGET_ENABLE_ENHANCED_HTTP_RETRY Изменение поведения
Источники аудита NuGet больше не разрешают небезопасный HTTP по умолчанию Изменение поведения
NuGet регистрирует ошибку для недопустимых идентификаторов пакетов Изменение поведения
ToolCommandName не задано для пакетов, отличных от инструментов Несовместимый источник
Установка пакета шаблонов проверяет подписи NuGet Изменение поведения

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

Название Тип изменения
System.Text.Json проверяет наличие конфликтов имен свойств Изменение поведения
XmlSerializer больше не игнорирует свойства, помеченные ObsoleteAttribute Изменение поведения

Windows Forms

Название Тип изменения
Устаревание API Несовместимый источник
Приложения, ссылающиеся как на WPF, так и на WinForms, должны различать типы MenuItem и ContextMenu Несовместимый источник
Переименованный параметр в HtmlElement.InsertAdjacentElement Несовместимый источник
Усечение изображения флажка TreeView Изменение поведения
StatusStrip использует System RenderMode по умолчанию Изменение поведения
System.Drawing OutOfMemoryException изменилось на ExternalException Изменение поведения

Windows Presentation Foundation (WPF)

Название Тип изменения
Пустые ColumnDefinitions и RowDefinitions запрещены Несовместимый источник
Неправильное использование DynamicResource приводит к сбою приложения Изменение, несовместимое с источником/поведенческое изменение