Andrey on .NET | .NET 7 Release Candidate 2

.NET 7 Release Candidate 2

.NET logoВыход финальной версии .NET 7 должен состояться уже менее чем через месяц. Это произойдёт на .NET Conf 2022, которая пройдёт с 8 по 10 ноября 2022 года. А пока стала доступна 2 предварительная версия.

.NET 7 RC 2 была протестирована в работе с Visual Studio 17.4 Preview 3 и с последней предварительной версией Visual Studio for Mac.

Где скачать?

 

.NET 7 RC 2

Автоматический откат на reflection при использовании генераторов исходного кода в System.Text.Json

System.Text.Json предоставляет возможность генерировать JSON сериализаторы для заданных классов. Однако, использование такого сериализатора с неизвестным ему типом приведет к выбросу InvalidOperationException.

В Release Candidate 2 появилась возможность включить автоматический откат на использование reflection в таких ситуациях. Для этого необходимо добавить в проект следующую настройку:

<ItemGroup>
  <RuntimeHostConfigurationOption Include="System.Text.Json.Serialization.EnableSourceGenReflectionFallback" Value="true" />
</ItemGroup>

Новые анализаторы кода

В .NET 7 RC2 появилось два новых анализатора кода, которые проверяют следующее:

  • Корректность реализации интерфейсов математики (Generic Math).
  • Наличие вызовов методов System.IntPtr и System.UIntPtr, поведение которых может отличаться в .NET 6 и .NET 7.

 

 

ASP.NET Core 7 RC 2

Улучшение кэширования

  • Кэшированные данные раньше сохранялись в JSON. Теперь для этого используется бинарный формат, который компактнее и быстрее обрабатывается.
  • Появилась возможность отдельно кэшировать данные для разных доменов (до этого у каждого домена был свой кэш). Для этого добавлен новый метод SetVaryByHost:
builder.Services.AddOutputCache(options =>
{
    options.AddBasePolicy(builder => builder.SetVaryByHost(false));
}
  • Теперь можно создать OutputCachePolicyBuilder без настроек по умолчанию.
  • Многие методы настройки кэширования получили префикс “Set” чтобы подчеркнуть что они меняют соответствующие свойства.

Запросы аутентификации с msal.js

В приложениях Blazor стала доступна динамическая аутентификация с произвольными параметрами при помощи Microsoft Identity Platform. Эта возможность реализована в библиотеке msal.js.

Улучшенная диагностика аутентификации в Blazor WebAssembly

Для отладки процесса аутентификации можно включить подробную диагностику при помощи следующей настройки:

"Logging": {
    "LogLevel": {
        "Microsoft.AspNetCore.Components.WebAssembly.Authentication": "Debug"
    }
}

Экспериментальная поддержка многопоточности в WebAssembly

В .NET 7 RC 2 появилась экспериментальная поддержка многопоточности в WebAssembly на базе Web Workers. Для её использования необходимо установить опциональную загрузку (optional workload) wasm-experimental и добавить в проект пакет Microsoft.NET.WebAssembly.Threading. После этого можно использовать класс Thread для создания отдельных потоков, которые будут выполняться при помощи Web Worker.

Как уже было отмечено, поддержка потоков в данный момент экспериментальная и существует ряд ограничений. Например, JSExport , JSImport  и поддержка WebSocket пока доступны только из основного потока. Также еще не реализована поддержка Firefox.

 

Entity Framework 7 RC 2

С момента выхода первой предварительной версии было исправлено 84 ошибки.

Во второй предварительной версии Entity Framework 7 сделан фокус на возможности использовать JSON-колонки.

Большинство баз данных позволяют сохранять объекты в JSON формате в отдельной колонке. В запросах можно осуществлять поиск внутри таких объектов и возвращать их части в качестве результата.

Для использования данной возможности необходимо указать какие свойства будут сохранены как JSON объект. Например, у Customer есть свойство Contact которое, в свою очередь, содержит свойство Address. Следующая конфигурация позволит сохранять свойство Contact вместе с Address в JSON-колонку базы данных.

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Customer>().OwnsOne(
        customer => customer.Contact, b =>
        {
            b.ToJson();
            b.OwnsOne(contact => contact.Address);
        });
}

Запросы к таким сущностям в Entity Framework выглядят как обычно. Например:

List customers = await context.Customers
    .Where(customer => customer.Contact.Address.City == cityToFind)
    .ToListAsync();

Обновление данных также ничем не отличается от обычного использования SaveChanges(…) и SaveChangesAsync(…). Но тут стоит отметить, что в зависимости от объема изменений Entity Framework может как заменить весь JSON объект, так и изменить отдельные данные в нем.

В предварительной версии есть ряд ограничений. Например, нет поддержки данной возможности в сторонних провайдерах (PostgreSQL и MySQL).

Также уже известно, что в финальную версию Entity Framework 7 не войдет часть функционала:

Он будет доступен позже.

Дополнительные ссылки

Официальные анонсы от Microsoft можно найти по следующим ссылкам:

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

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