Доступна .NET 6 Preview 6

.NET logoВышла 6 предварительная версия .NET 6. С каждым разом нововведений становится все меньше и меньше, т.к. до финальной версии остается менее полугода и платформа идет к стабилизации. Рассмотрим что изменилось за месяц, с момента предыдущей предварительной версии.

Где скачать?

Для работы с .NET 6 Preview 6 рекомендуется использовать Visual Studio 2020 Preview 2 и Visual Studio for Mac версии 8.9. Интересно отсутствие Visual Studio 2019 в этом списке. Означает ли это, что можно ждать новую версию Visual Studio 2022 примерно с выходом .NET 6? Скоро узначем.

.NET 6 Preview 6

Поддержка аппаратных платформ

Добавление поддержки Apple Silicon для macOS и Arm64 для Windows почти завершено. Из оставшегося к завершению – эмуляция x64 для указанных аппаратных платформ.

Улучшение для Optional Workload

В предыдущих версиях в SDK была внесена концепция Optional Workload – это размещение опциональных частей SDK в отдельных компонентах, которые можно добавить после установки самого SDK. Таким образом размер основного SDK не будет разрастаться неограниченно, разработчики смогут устанавливать только то, что действительно им требуется в работе. В Optional Workload можно найти такие дополнения как Android SDK, .NET MAUI SDK с поддержкой различных платформ, Microsoft tvOS SDK и другие.

Также уже были доступны 3 команды для работы с Optional Workload:

  • dotnet workload install – устанавливает указанный Optional Workload.
  • dotnet workload list – выводит список установленных Optional Workload.
  • dotnet workload update – обновляет установленные Optional Workload до последней версии.

Теперь добавились еще 3:

  • dotnet workload search – ищет Optional Workload или показывает все доступные при запуске без дополнительных параметров.
  • dotnet workload uninstall – удаляет заданный Optional Workload.
  • dotnet workload repair – восстанавливает Optional Workload (например если при его установке произошел сбой).

Поддержка TLS в System.DirectoryServices.Protocols

Дополнительно к Windows, System.DirectoryServices.Protocols получил поддержку TLS в Linux и macOS.

Crossgen заменен на Crossgen2

Crossgen позволяет произвести предварительную компиляцию IL в нативный код во время публикации приложения. Это ускоряет запуск самого приложения.

.NET 6 теперь использует crossgen2, для подключения которого можно использовать следующие свойства MSBuild:

<PublishReadyToRun>true</PublishReadyToRun> 
<PublishReadyToRunComposite>true</PublishReadyToRunComposite>

Предыдущая версия crossgen больше не используется и была удалена.

Улучшение взаимодействия асинхронного и синхронного кода

Вызов асинхронного кода из синхронного типичный пример блокирующего процесса, который может приводить к нехватке числа доступных потоков. Чтобы этого избежать .NET добавляет потоки по мере необходимости.

В .NET 6 Preview 6 была увеличена скорость добавления потоков, если все блокировки происходят из-за вызова асинхронного кода из синхронного. Кроме того, в AppContext добавлены новые параметры для контроля этого процесса.

W^X политика защиты памяти (memory policy)

Появилась новая политика защиты памяти W^X (читается как "write exclusive execute"). Это означает что страница памяти может быть отмечена для чтения/записи или чтения/выполнения, но не для записи/выполнения. Причина в том, что страницы последнего типа могут быть целью для различного рода атак (например, на переполнение буфера).

Данная политика является требуемой на Apple Silicon, но будет использоваться и на других платформах.

ASP.NET Core в .NET 6 Preview 6

Улучшения доступности (accessibility)

Blazor получил ряд улучшений, которые делают его работу совместно приложением для чтения с экрана более удобной. Например, компонент Counter получил role="status" для того, чтобы его значение было прочитано при каждом изменении. Также стали применяться элементы семантической разметки (такие как main, article). У кнопка на NavBar появился title.

Требуемые параметры компонентов Blazor

Параметры компонентов Blazor теперь можно отмечать атрибутом [EditorRequired]. Во время разработки, при отсутствии значения для такого параметра, редактор будет выдавать предупреждение. Стоит отметить, что данные атрибут не действует в run-time и не защищает от передачи значения null в указанные параметр.

Улучшенная передача байтовых массивов при взаимодействии с JavaScript

Раньше для передачи массива байт из .NET в JavaScript использовался Base64. Теперь он заменен на Uint8Array, что занимает меньше места и требует меньше ресурсов для обработки. Аналогично и обратно в .NET можно передавать Uint8Array. Данное изменение является критическим (breaking change) и теребует модификации исходного кода приложений, которые использовали Base64.

Опциональные параметры для вспомогательных функций тегов (tag helpers)

Вспомогательные функций тегов теперь поддерживают опциональные параметры. Чтобы объявить параметр опциональным достаточно указать ему значение по умолчанию.

Обновление Angular

В шаблонах проектов Angular обновлен для версии 12.

Улучшения мини API приложений

Мини API приложения это облегченные версии API приложений с минимумом инфраструктурного и служебного кода. Такое приложение можно создать при помощи команды dotnet new web -o [AppName].

  • Теперь можно подключить OpenAPI (Swagger).
  • У параметров методов нет необходимости указывать атрибут [FromServices]. ASP.NET Core проверит параметры на возможность получения их значений из контейнера зависимостей.

IHttpActivityFeature

ASP.NET Core, при наличии активной диагностики (diagnostic listeners), создает Activity для каждого запроса. IHttpActivityFeature позволяет добавить в него произвольную информацию.

app.Run(context =>
{
    var activity = context.Features.Get<IHttpActivityFeature>()?.Activity;
    if (activity is not null)
    {
        activity.AddTag("some_info", "true");
    }
});

Данный интерфейс уже используется SignalR чтобы добавлять тег "http.long_running" для длительных соединений. В последствии, данный тег могут использовать такие инструменты как Azure Monitor Application Insights для уведомлений.

Улучшения работы с сокетами

  • Появилась возможность контролировать процесс создания сокетов при помощи SocketTransportOptions.
  • WebSocket может использовать сжатие. По умолчанию данная возможность выключена, т.к. это может привести к CRIME/BREACH атакам при передачи приватной информации. Для включения используется флаг System.Net.WebSockets.WebSocketMessageFlags.DisableCompression в методе SendAsync.
  • В конфигурацию создания соединения добавлен WebSocketFactory.

Событие OnCheckSlidingExpiration для cookie

Новое событие может быть использовано для контроля срока жизни cookie.

Entity Framework Core 6.0 Preview 6

Основные нововведения Entity Framework Core 6.0 Preview 6 включают:

  • Поддержка 64-битных начальных значений идентификаторов.
  • Поддержка DateOnly и TimeOnly в SQLite
  • Унификация и валидация имен ограничений (check constraint).
  • Предварительная конфигурация модели, которая используется для
    • установки соответствия типов .NET и БД до этапа конфигурации модели.
    • исключения указанного типа из моделей (сам тип и свойства данного типа будут игнорироваться).

Например, можно указать что тип string всегда будет храниться в БД как byte[] с максимальной длинной 255, а тип TypeToIgnore должен игнорироваться. Для использования этой возможности добавлен метод ConfigureConventions(…).

protected override void ConfigureConventions(ModelConfigurationBuilder configurationBuilder)
{
    configurationBuilder.Properties<string>()
        .HaveConversion<byte[]>()
        .HaveMaxLength(255);

    configurationBuilder.IgnoreAny<TypeToIgnore>();
}

Кроме того, в этом списке на GitHub можно найти сделанные исправления ошибок и небольшие изменения.

Пакеты с новой версией Entity Framework Core 6.0 уже доступны в NuGet.

.NET MAUI Preview 6

И в завершении коротко о новых возможностях MAUI:

  • Как уже упоминалось выше, MAUI и его компоненты доступны как workload для .NET 6.
  • Добавлено распознание жестов (gestures).
  • Для определения области отсечения (clipping) можно применять фигуры (shapes).
  • На разных платформах используются свои (нативные) оповещения.
  • Для разных платформ, включая Windows, может быть создан один проект.

Ссылки

Полные описания нововведений доступны по следующим ссылкам:

Кроме того, следующую дополнительную информацию можно найти на GitHub:

Добавить комментарий