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


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

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

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

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

ASP.NET Core

Заголовок Совместимость на уровне двоичных файлов Совместимость на уровне исходного кода
ActionResult<T> задает для StatusCode значение 200 ✔️
Метод AddDataAnnotationsValidation теперь считается устаревшим ✔️
Из общей платформы Microsoft.AspNetCore.App удалены сборки ✔️
Blazor: изменено имя параметра в методе RequestImageFileAsync ✔️
Blazor: свойство WebEventDescriptor.EventArgsType заменено
Blazor: взаимодействие массивов байтов ✔️
Changed MessagePack library in @microsoft/signalr-protocol-msgpack ✔️
Свойство ClientCertificate не запускает повторное согласование для HttpSys ✔️
Метаданные EndpointName не задаются автоматически ✔️
Удостоверение: изменена версия начальной загрузки пользовательского интерфейса по умолчанию
Kestrel: Атрибуты сообщения журнала изменились ✔️
Разбиение пакета Microsoft.AspNetCore.Http.Features ✔️
ПО промежуточного слоя: ПО промежуточного слоя перенаправления HTTPS создает исключение для неоднозначных портов HTTPS ✔️
ПО промежуточного слоя: новая перегрузка Use ✔️
Минимальные переименования API в RC 1
Минимальные переименования API в RC 2
MVC не помещает в буфер типы IAsyncEnumerable при использовании System.Text.Json ✔️
Изменены заметки ссылочного типа, допускающие значение NULL ✔️
Устаревшие и удаленные API ✔️
Свойство PreserveCompilationContext не настроено по умолчанию ✔️
Razor. Компилятор больше не создает сборку Views ✔️
Razor. Изменения идентификаторов в журнале ✔️
Razor: API RazorEngine помечены как устаревшие ✔️
SignalR. Обновление клиента Java до версии RxJava3 ✔️
Методы TryParse и BindAsync проверены

Контейнеры

Заголовок Совместимость на уровне двоичных файлов Совместимость на уровне исходного кода
Форматирование средства ведения журнала консоли по умолчанию в образах контейнеров ✔️

Сведения о других критических изменениях для контейнеров в .NET 6 см. в заметках о выпуске контейнеров .NET 6.

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

Заголовок Совместимость на уровне двоичных файлов Совместимость на уровне исходного кода
Устаревшие API с отличными от заданных по умолчанию идентификаторами диагностики ✔️
Изменения в заметках ссылочного типа, допускающих значения NULL ✔️
Условное вычисление значения строки в методах отладки ✔️
Поведение Environment.ProcessorCount в Windows ✔️
Поведение обратного вызова EventSource ✔️ ✔️
File.Replace в UNIX вызывает исключения для соответствия в Windows ✔️
FileStream блокирует файлы с общей блокировкой в Unix ✔️
FileStream больше не синхронизирует смещение файла с ОС
FileStream.Position обновляется после завершения ReadAsync или WriteAsync
Новые идентификаторы диагностики для устаревших API-интерфейсов ✔️
Новые перегрузки методов System.Linq.Queryable ✔️
Предыдущие версии платформы удалены из пакета ✔️
Изменены имена параметров ✔️
Имена параметров в типах, производных от Stream ✔️
Частичные и нулевые операции чтения в DeflateStream, GZipStream и CryptoStream ✔️
Установка метки времени в файле только для чтения в Windows ✔️
Точность синтаксического анализа стандартного числового формата ✔️
Статические абстрактные элементы в интерфейсах ✔️
StringBuilder.Append перегрузки и порядок оценки ✔️
API строгого имени вызывают PlatformNotSupportedException ✔️
System.Drawing.Common поддерживается только в Windows
System.Security.SecurityContext помечен как устаревший ✔️
Task.FromResult может возвращать одноэлементный ✔️
Необработанные исключения от BackgroundService ✔️

Шифрование

Заголовок Совместимость на уровне двоичных файлов Совместимость на уровне исходного кода
Методы CreateEncryptor создают исключение для неправильного размера обратной связи ✔️

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

Заголовок Совместимость на уровне двоичных файлов Совместимость на уровне исходного кода
Путь к 64-разрядному узлу x86 в Windows ✔️ ✔️

Entity Framework Core

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

Расширения

Заголовок Совместимость на уровне двоичных файлов Совместимость на уровне исходного кода
AddProvider проверяет, что поставщик не поддерживает NULL ✔️
FileConfigurationProvider.Load вызывает исключение InvalidDataException ✔️
Повторяющиеся XML-элементы включают индекс ✔️
Разрешение удаления ServiceProvider вызывает исключение ✔️

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

Заголовок Совместимость на уровне двоичных файлов Совместимость на уровне исходного кода
Создание языка и региональных параметров и сопоставление регистра в инвариантном режиме глобализации

Interop

Заголовок Совместимость на уровне двоичных файлов Совместимость на уровне исходного кода
Статические абстрактные элементы в интерфейсах ✔️

JIT-компилятор

Заголовок Совместимость на уровне двоичных файлов Совместимость на уровне исходного кода
Приведение аргументов вызова в соответствии с ECMA-335 ✔️ ✔️

Сеть

Заголовок Совместимость на уровне двоичных файлов Совместимость на уровне исходного кода
Порт удален из имени субъекта-службы для Kerberos и Negotiate ✔️
WebRequest, WebClient и ServicePoint устарели ✔️

SDK

Заголовок Совместимость на уровне двоичных файлов Совместимость на уровне исходного кода
Параметр -p для dotnet run устарел. ✔️
Код C# в шаблонах не поддерживается более ранними версиями ✔️ ✔️
Файлы EditorConfig неявно включены ✔️
Создание AppHost для macOS ✔️
Выдача ошибки при повторяющихся файлах в выходных данных публикации ✔️
GetTargetFrameworkProperties и GetNearestTargetFramework удалены из протокола ProjectReference ✔️
Расположение установки для эмуляции x64 в Arm64 ✔️
MSBuild больше не поддерживает вызов GetType()
Не удается установить .NET в пользовательском расположении ✔️ ✔️
OutputType не задано автоматически для WinExe ✔️
Публикация ReadyToRun с помощью --no-restore требует изменений ✔️
runtimeconfig.dev.json файл не создан ✔️
Появление предупреждения для RuntimeIdentifier, если не указана автономность ✔️
Манифесты инструментов в корневой папке ✔️ ✔️
Требования к версии пакета SDK для .NET 6 ✔️ ✔️
Файл .version включает версию сборки ✔️ ✔️
Запись ссылочных сборок в IntermediateOutputPath ✔️

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

Заголовок Совместимость на уровне двоичных файлов Совместимость на уровне исходного кода
DataContractSerializer сохраняет знак при десериализации -0 ✔️
Формат сериализации по умолчанию для TimeSpan ✔️
Сериализация IAsyncEnumerable ✔️
Рефакторинг API создания источника JSON ✔️
JsonNumberHandlingAttribute для свойств коллекции ✔️
Новые перегрузки генератора исходного кода JsonSerializer ✔️

Windows Forms

Заголовок Совместимость на уровне двоичных файлов Совместимость на уровне исходного кода
Шаблоны C# используют начальную загрузку приложения ✔️
Выбранные свойства TableLayoutSettings выдают исключение InvalidEnumArgumentException ✔️
API, связанные с DataGridView, теперь вызывают исключение InvalidOperationException ✔️
Методы ListViewGroupCollection вызывают новое исключение InvalidOperationException ✔️
Увеличение максимальной длины текста NotifyIcon.Text ✔️
ScaleControl вызывается только при необходимости ✔️
Некоторые API создают исключение ArgumentNullException ✔️
TreeNodeCollection.Item создает исключение, если узел назначен в другом месте ✔️

XML и XSLT

Заголовок Совместимость на уровне двоичных файлов Совместимость на уровне исходного кода
Поведение XNodeReader.GetAttribute для недопустимого индекса ✔️

См. также