Поделиться через


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

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

В этой статье указывается, совместим ли каждое критическое изменение с двоичным кодом или совместимо с источником:

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

ASP.NET Core

Заголовок Совместимость на уровне двоичных файлов Совместимость на уровне исходного кода
ASP.NET основные приложения десериализации кавычек ✔️
Устаревшие API AzureAD.UI и AzureADB2C.UI ✔️
Методы сериализации BinaryFormatter устарели ✔️
Ресурс в маршрутизации конечных точек — HttpContext ✔️
Удаленные пакеты интеграции Azure с префиксом Майкрософт ✔️
Blazor: изменение логики приоритета маршрута в приложениях Blazor ✔️
Blazor: обновлена поддержка браузера ✔️ ✔️
Blazor: незначительные пробелы, обрезанные компилятором ✔️
Blazor: типы JSObjectReference и JSInProcessObjectReference являются внутренними ✔️
Blazor: целевая платформа пакетов NuGet изменилась ✔️
Blazor: ProtectedBrowser служба хранилища функция перемещена в общую платформу ✔️
Blazor: общедоступные поля RenderTreeFrame теперь являются свойствами ✔️
Blazor: обновленная логика проверки для статических веб-ресурсов ✔️
API-интерфейсы шифрования не поддерживаются в браузере ✔️
Расширения: изменения ссылки на пакет ✔️
Типы Kestrel и IIS BadHttpRequestException устарели ✔️
Экземпляры HttpClient, созданные кодами состояния журнала IHttpClientFactory ✔️
HttpSys: повторное согласование сертификата клиента, отключенное по умолчанию ✔️
IIS: строки запроса ПО промежуточного слоя UrlRewrite сохраняются ✔️
Kestrel: изменения конфигурации, обнаруженные по умолчанию ✔️
Kestrel: изменены поддерживаемые по умолчанию версии протокола TLS ✔️
Kestrel: HTTP/2 отключен по протоколу TLS в несовместимых версиях Windows ✔️ ✔️
Kestrel: Транспорт Libuv помечен как устаревший ✔️
Устаревшие свойства ConsoleLoggerOptions ✔️
Класс ResourceManagerWithCultureStringLocalizer и член интерфейса WithCulture удален ✔️
Удаленные API-интерфейсы pubternal ✔️
Устаревший конструктор удален в ПО промежуточного слоя локализации запросов ✔️
ПО промежуточного слоя: страница ошибок базы данных, помеченная как устаревшая ✔️
ПО промежуточного слоя обработчика исключений создает исходное исключение ✔️ ✔️
ObjectModelValidator вызывает новую перегрузку Validate ✔️
Удалена кодировка имени файла cookie ✔️
Обновленные версии пакетов NuGet IdentityModel ✔️
SignalR: изменен тип параметров протокола MessagePack Hub ✔️
SignalR: протокол MessagePack Hub перемещен ✔️
Методы UseSignalR и Use Подключение ions удалены ✔️
Тип содержимого CSV изменен на соответствие стандартам ✔️

Анализ кода

Заголовок Совместимость на уровне двоичных файлов Совместимость на уровне исходного кода
Предупреждение CA1416 ✔️
Предупреждение CA1417 ✔️
Предупреждение CA1831 ✔️
Предупреждение CA2013 ✔️
Предупреждение CA2014 ✔️
Предупреждение CA2015 ✔️
Предупреждение CA2200 ✔️
Предупреждение CA2247 ✔️

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

Заголовок Совместимость на уровне двоичных файлов Совместимость на уровне исходного кода
Изменения API, связанные с сборками для публикации с одним файлом ✔️
Методы сериализации BinaryFormatter устарели ✔️
API безопасности доступа к коду устарели ✔️
CreateCounterSetInstance создает исключение InvalidOperationException ✔️
По умолчанию ActivityIdFormat имеет значение W3C ✔️
Environment.OSVersion возвращает правильную версию ✔️
Значение FrameworkDescription — это .NET не .NET Core ✔️
API GAC устарели ✔️
Встроенные аппаратные проверка IsSupported ✔️
IntPtr и UIntPtr реализуют IFormattable ✔️
LastIndexOf обрабатывает пустые строки поиска ✔️
Пути URI с символами, отличными от ASCII в Unix ✔️
Устаревшие API с отличными от заданных по умолчанию идентификаторами диагностики ✔️
Устаревшие свойства ConsoleLoggerOptions ✔️
Сложность LINQ OrderBy.First ✔️
Атрибуты OSPlatform переименованы или удалены ✔️
Удален пакет Microsoft.DotNet.PlatformAbstractions ✔️
PrincipalPermissionAttribute устарел ✔️
Изменения имени параметра из предварительных версий ✔️
Изменения имени параметра в эталонных сборках ✔️
API удаленного взаимодействия устарели ✔️
Обратный порядок списка Activity.Tags ✔️
Методы сравнения SSE и SSE2 обрабатывают NaN ✔️
Thread.Abort устарел ✔️
Распознавание URI UNC-путей в UNIX ✔️
Пути к коду в кодировке UTF-7 устарели ✔️
Изменение в поведении для Vector2.Lerp и Vector4.Lerp ✔️
Vector<T> создает исключение NotSupportedException ✔️

Шифрование

Заголовок Совместимость на уровне двоичных файлов Совместимость на уровне исходного кода
API-интерфейсы шифрования не поддерживаются в браузере ✔️
Криптография.Oid доступна только для инициализации ✔️
Наборы шифров TLS по умолчанию в Linux ✔️
Перегрузки Create() для криптографических абстракций устарели ✔️
Изменено значение FeedbackSize по умолчанию ✔️

Entity Framework Core

Критические изменения в EF Core 5.0

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

Заголовок Совместимость на уровне двоичных файлов Совместимость на уровне исходного кода
Использование библиотек ICU в Windows ✔️
StringInfo и TextElementEnumerator совместимы с UAX29 ✔️
Категория Юникода изменена для символов Latin-1 ✔️
Изменены значения TextInfo.ListSeparator ✔️

Interop

Заголовок Совместимость на уровне двоичных файлов Совместимость на уровне исходного кода
Поддержка WinRT удалена ✔️
Приведение RCW к InterfaceIsIInspectable вызывает исключение ✔️
Отсутствует проверка суффикса A/W на платформах, отличных от Windows ✔️

Сеть

Заголовок Совместимость на уровне двоичных файлов Совместимость на уровне исходного кода
Обработка пути файлов cookie соответствует RFC 6265 ✔️
LocalEndPoint обновляется после вызова SendToAsync ✔️
MulticastOption.Group не принимает значение NULL ✔️
Потоки разрешить последовательные операции Begin ✔️
Класс WinHttpHandler удален из среды выполнения .NET ✔️

SDK

Заголовок Совместимость на уровне двоичных файлов Совместимость на уровне исходного кода
Файлы Directory.Packages.props, импортированные по умолчанию ✔️
Ошибка возникает, когда исполняемый проект ссылается на несоответствующий исполняемый файл ✔️
Элемент FrameworkReference заменен на WindowsSdkPackageVersion для Windows SDK ✔️
символ препроцессора NETCOREAPP3_1 не определен ✔️
OutputType имеет значение WinExe ✔️
Изменение поведения PublishDepsFilePath ✔️
Значение TargetFramework изменено с netcoreapp на net ✔️
В приложениях WinForms и WPF используется Microsoft.NET.Sdk ✔️

Безопасность

Заголовок Совместимость на уровне двоичных файлов Совместимость на уровне исходного кода
API безопасности доступа к коду устарели ✔️
PrincipalPermissionAttribute устарел ✔️
Пути к коду в кодировке UTF-7 устарели ✔️

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

Заголовок Совместимость на уровне двоичных файлов Совместимость на уровне исходного кода
Исключения BinaryFormatter.Deserialize rewraps ✔️
Для JsonSerializer.Deserialize требуется строка из одного символа ✔️
ASP.NET основные приложения десериализации кавычек ✔️
JsonSerializer.Serialize создает исключение ArgumentNullException ✔️
Не являющиеся открытыми конструкторы без параметров не используются для десериализации ✔️
Параметры учитываются при сериализации пар "ключ-значение" ✔️

Windows Forms

Заголовок Совместимость на уровне двоичных файлов Совместимость на уровне исходного кода
Машинный код не может получить доступ к объектам Windows Forms ✔️
OutputType имеет значение WinExe ✔️
DataGridView не сбрасывает пользовательские шрифты ✔️
Методы вызывают ArgumentException ✔️
Методы вызывают ArgumentNullException ✔️
Свойства вызывают АргументOutOfRangeException ✔️
Флаг TextFormatFlags.ModifyString является устаревшим ✔️
API DataGridView вызывают InvalidOperationException ✔️
Приложения WinForms используют Microsoft.NET.Sdk ✔️
Удалены элементы управления строкой состояния ✔️

WPF

Заголовок Совместимость на уровне двоичных файлов Совместимость на уровне исходного кода
OutputType имеет значение WinExe ✔️
Приложения WPF используют Microsoft.NET.Sdk ✔️

См. также