Доступен .NET 6 Release Candidate 2

.NET logoВышел второй и, скорее всего, последний Release Candidate для .NET 6. Коротко пройдемся по изменениям в .NET и ASP.NET Core частях этой версии.

Для использования .NET 6 RC2 необходимо установить Visual Studio 2022 Preview 5 или Visual Studio 2022 for Mac Preview 2.

Где скачать?

.NET 6 RC2 SDK (Linux, macOS, Windows)

.NET

В .NET 6 RC2 почти завершен проект по поддержке macOS и Windows Arm64. В данный момент Arm64 и x64 могут существовать совместно при условии установки в различные директории (раньше это было невозможно). Arm64 будет поддерживаться в .NET 6 SDK (и последующих), а вот .NET 5 SDK for Windows Arm64 останется без поддержки с момента выхода финальной версии .NET 6.

Кроме того, CLI в Arm64 SDK позволяет вести разработку Arm64 и x64 приложений, как и наоборот. Но при этом, на Arm64 системах рекомендуется использовать Arm64 версию SDK ввиду её лучшей производительности.

В финальной версии .NET 6 будет два критических изменения, которые затрагивают работу dotnet test.

  • "-a" будет сокращением "--arch" вместо "--test-adapter-path".
  • "-r" будет сокращением "--runtime" вместо "--results-dir".

В .NET 6 RC2 пока еще осталось старое поведение данных ключей.

ASP.NET Core

Minimal API

Привязка параметров (parameter binding)

Если у класса, который указан как параметр метода обработчика запросов, объявлены методы TryParse или BindAsync, то ASP.NET воспользуется ими для преобразования значения из запроса.

Ниже приведены их сигнатуры. Обратите внимание что это не обобщенные (generic) методы. Здесь T просто заменяет тип результата:

public static bool TryParse(string value, T out result);
public static bool TryParse(string value, IFormatProvider provider, T out result);

public static ValueTask<T?> BindAsync(HttpContext context, ParameterInfo? parameter);
public static ValueTask<T?> BindAsync(HttpContext context);

В ASP.NET 6 RC2 теперь можно использовать унаследованные методы. При этом для всех публичных TryParse и BindAsync методов ASP.NET проверит их сигнатуру и выбросит исключение при её несовпадении.

OpenAPI

Метод описания типа тела (body) запроса Accepts<TRequest>() получил параметр isRequired, который указывает является ли тело запроса обязательным. Аналогичное свойство IsRequired добавлено в служащий для той же цели атрибут [Consumes] .

Метод WithTags() позволяет добавить одну конечную точку API (endpoint) в различные группы, согласно указанным в нем меткам (tags).

Анализ исходного кода

Добавлены анализаторы:

  • Проверка корректной очередности подключения модулей middleware в WebApplicationBuilder.
  • Поиск мест, где результат обработки запроса неявно сериализуется в JSON .
  • Определение атрибутов, указанных не для лямбды обработчика запроса, а для метода, который используется в этой лямбде.
  • Нахождение несоответствия параметра (требуемый или опциональный) в описании пути и лямбде обработчика запроса.

Критические изменения

  • Переименования:
    • DelegateEndpointConventionBuilder в RouteHandlerBuilder.
    • OpenApiDelegateEndpointConventionBuilderExtensions в OpenApiRouteHandlerBuilderExtensions.
  • Объединения:
    • DelegateEndpointRouteBuilderExtensions с EndpointRouteBuilderExtensions.

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