Net core 5 что нового
Перейти к содержимому

Net core 5 что нового

  • автор:

Net core 5 что нового

10 ноября вышел в долгожданный релиз фреймворк .NET 5 , который является развитием .NET Core в долгой эволюции фреймворка .NET. .NET 5.0 — это первый релиз на пути к унификации платформы .NET, который позволяет более плавно мигрировать с .NET Framework.

Некоторые ключевые моменты в .NET 5:

  • Однофайловые приложения (single file application). Все зависимости приложения теперь можно поместить в один файл с исполняемым файлом. Кроме того, на целевом компьютере теперь необязательно предварительно предустанавливать фреймворк .NET.
  • Улучшение поддержки и разработки десктоп-приложений (Windows Forms, WPF)
  • Новые возможности C# 9.0 и F# 5.0, например, records, программы верхнего уровня, улучшенные выражения switch и т.д.
  • Поддержка Windows ARM64
  • Улучшение производительности по сравнению с предыдущими версиями

Боле подробную информацию про релиз .NET 5 можно найти на официальном сайте Microsoft на странице https://devblogs.microsoft.com/dotnet/announcing-net-5-0/

Вместе с .NET 5 вышли в релиз ASP.NET Core 5.0 и Entity Framework Core 5.0.

Основные новвоведения и улучшения в ASP.NET Core 5.0:

  • Улучшения в привязке модели в MVC, добавлена поддержка для типов records в C# 9
  • Улучшение поддержки Blazor Server и Blazor WebAssembly
  • Встроенная поддержка для OpenAPI и Swagger UI для Web API
  • Фильтры хабов SignalR и параллельное обращение к хабам
  • Авто обновление браузера с помощью команды dotnet watch
  • Улучшения производительности HTTP/2 и gRPC (если верить Microsoft gRPC на ASP.NET производительнее, чем в проектах на Go, С++ или Java)

И некоторые ключевые обновления в EF Core 5.0:

  • Добавлена поддержка автоматической связи Many-to-many
  • Добавлена возможность наследования table-per-type
  • Упрощенное логгирование

Для использования .NET 5.0, а также ASP.NET Core 5 и EF Core 5.0 необходимо установить Visual Studio 16.8 или выше на Windows или последнюю версию Visual Studio for Mac для macOS. Также можно использовать Visual Studio Code, в которой расширение для языка C# уже поддерживает .NET 5.0 and C# 9.

DevDotNet.ORG

Embedded Systems, IoT, .NET, Docker, Hosting, Linux

Что нового в .NET 5.0

Создано автором Anton 16.02.2021 в .NET

dotnet 5

10 ноября 2020 вышел в долгожданный релиз фреймворка .NET 5, который является развитием .NET Core в долгой эволюции фреймворка .NET.

.NET 5.0 — это первый релиз на пути к унификации платформы .NET, позволяющей более плавно мигрировать с .NET Framework.

Что мы получили с выходом .NET 5? В первую очередь это объединение различных фреймворков построенных на .NET — теперь нет Core, Mono, Xamarin – а есть единый .net5 target. Фактически, .net5 target пришел на замену netcoreapp и netstandard. Дополнительно можно выбрать платформу операционной системы, например: net5.0-android, net5.0-ios, или net5.0-windows (ссылка). Фреймворк стал действительно кроссплатформенным. В нем есть базовый набор классов и зависимые от конкретной операционной системы дополнения. В частности, для Windows есть поддержка привычного WinForms, который был выпущен и проверен ранее в .NET Core 3.1.

.net unified platform

.NET унифицированная платформа для различных устройств

В .NET 5 проведена большая работа по оптимизации как непосредственно производительности приложений, так и скорости компиляции исходного кода. Теперь тесты и ночные сборки в CI выполняются немного быстрее.

Что касается производительности кода, то в тестах по количеству gRPC запросов в секунду приложение .NET 5 занял второе место после Rust и опередил программный код, скомпилированный Go (диаграмма из блога).

dotnet gRPC

Следующим по значимости новшеством .NET 5, безусловно, стало включение новой версии языка C# 9. Наиболее интересным нововведением является появление записей (records). Новый синтаксис сильно упрощает описание неизменяемых моделей данных по сравнению с традиционными классами. В результате получился простой синтаксис декларации и инициализации.

public record Animal < public string? Name < get; init; >public string? Areal < get; init; >> var brownBear = new Animal < Name = "Bear", Areal = "Siberia" >; var whiteBear = animal with < Areal = "Arctic" >;

В новшествах языка также можно отметить возможность написания кода программы без использования функции main().

using System.Console; WriteLine("Hello World!");

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

Получил развитие вариант распространения приложения — Single File Application, который появился в .NET Core 3.1. Можно создать единый исполняемый файл, содержащий в себе все библиотеки с возможностью внедрения, в том числе всех используемых библиотек фреймворка. Теперь файлы стали меньше, и они быстрее запускаются.

Новая экосистема .NET будет иметь статус LTS (Long Time Support) только для четных версий. Так, например, .NET 5 не будет иметь статуса долговременной поддержки, а .NET 6 будет. Иными словами, следующие выпуски будут: .NET 6 LTS, .NET 7, .NET 8 LTS и т.д.

Некоторые ключевые моменты в .NET 5:

  • Улучшение поддержки и разработки настольных-приложений (Windows Forms, WPF)
  • Новые возможности C# 9.0 и F# 5.0, например, программы верхнего уровня, улучшенные выражения switch и т.д.
  • Поддержка архитектуры ARM64
  • Улучшение производительности по сравнению с предыдущими версиями

Вместе с .NET 5 вышли в релиз ASP.NET Core 5.0 и Entity Framework Core 5.0.
Основные новшества и улучшения в ASP.NET Core 5.0:

  • Улучшения в привязке модели в MVC, добавлена поддержка для типов records в C# 9
  • Улучшение поддержки Blazor Server и Blazor WebAssembly
  • Встроенная поддержка для OpenAPI и Swagger UI для Web API
  • Фильтры хабов SignalR и параллельное обращение к хабам
  • Авто обновление браузера с помощью команды dotnet watch
  • Улучшения производительности HTTP/2 и gRPC (если верить Microsoft gRPC на ASP.NET производительнее, чем в проектах на Go, С++ или Java)

И некоторые ключевые обновления в EF Core 5.0:

  • Добавлена поддержка автоматической связи Many-to-many
  • Добавлена возможность наследования table-per-type
  • Упрощенное логгирование

Для использования .NET 5.0, а также ASP.NET Core 5 и EF Core 5.0 необходимо установить Visual Studio 16.8 или выше на Windows или последнюю версию Visual Studio for Mac для macOS. Также можно использовать Visual Studio Code, в которой расширение для языка C# уже поддерживает .NET 5.0 and C# 9.

Боле подробную информацию про релиз .NET 5 можно найти на официальном сайте Microsoft на страницеAnnouncing .NET 5.0

Ресурсы
  • Загрузить .NET с сайта Microsoft можно по ссылке Download .NET 5.0.
  • Проект .NET Core на GitHub — dotnet/core.
  • Docker-образы для .NET
  • Docker-образы .NET SDK
  • Docker-образы .NET Runtime
  • Docker-образы .NET Runtime Dependencies
  • Docker-образы .NET Samples

Ссылки

  • Вышли в релиз .NET 5, ASP.NET Core 5 и EF Core 5.0 — METANIT.COM
  • Что нового в .NET 5? — ВКонтакте
  • Вышел .NET 5. И что? — Хабр
  • Announcing .NET 5.0 — .NET Blog Microsoft
  • Performance Improvements in .NET 5 — .NET Blog Microsoft
  • gRPC performance improvements in .NET 5 — ASP.NET Blog Microsoft
  • .NET 5.0 Examples — richlander/examples.md GitHub

Вышел .NET 5. И что?

Несколько недель назад вышел .NET 5. На сайте Microsoft можно найти подробный анонс со всеми изменениями, но главный вопрос для меня, как для разработчика — и что с того? Что мне с выхода пятого дотнета, как я могу его использовать, есть ли смысл переходить на новую версию прямо сейчас? На эти вопросы я постараюсь ответить дальше.

image

Перфоманс

Изменения в перфомансе — это самая заметная часть релиза. О них много писали на сайте Microsoft и рассказывали на .NET Conf. Давайте посмотрим внимательнее и определимся, где, насколько и за счет чего выросла производительность.

image

Измерения перфоманса с этого скрина основаны на бенчмарках от TechEmpower. Здесь Microsoft сравнивают результаты замеров производительности .NET 3.1 с ожидаемыми значениями для .NET 5. Стоит заметить, что это именно ожидаемые значения — реальных результатов от TechEmpower пока не было. Однако уже эти результаты выглядят впечатляюще — ускорение на 38 процентов для Plaintext, на 42 для Json и на 20 процентов в категории Fortunes (пояснения по разным типам бенчмарков вы можете найти в вики TechEmpower).

Помимо результатов бенчмарков от TechEmpower, Microsoft также рассказывает и о других улучшениях. Например, сериализация JSON стала работать на 20% быстрее, а сериализация больших коллекций и массивов ускорилась аж в три раза.

Также замеры производительности делал автор библиотеки Fusion Александр Якунин. В двух статьях на Medium он сначала измерил, насколько ускорилась работа демок его библиотеки (от 20 до 105 процентов), а затем проверил пятый .NET на нескольких синтетических бенчмарках — и также получил некоторое ускорение.

За счет чего это происходит? В первую очередь, благодаря изменениям в GC, которые привели к уменьшению количества аллокаций и ускорению сборки мусора. Кстати, все эти изменения осуществляются одновременно с переписыванием GC на C#, а значит его код становится куда доступнее, понятнее и безопаснее. Подробности можно почитать в статье от Microsoft.

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

Изменения в JSON сериализации выглядят особенно впечатляюще. Только посмотрите на результаты бенчмарка по сериализации больших массивов!

private MemoryStream _stream = new MemoryStream(); private DateTime[] _array = Enumerable.Range(0, 1000).Select(_ => DateTime.UtcNow).ToArray(); [Benchmark] public Task LargeArray()

image

Коротко — пятый дотнет сильно вырос в производительности и это важнейшая часть нового релиза. Большинство стандартных веб-приложений могут ожидать прирост производительности на 20% и выше, а отдельные приложения могут и вовсе ускориться в несколько раз.

Языковое

Вместе с .NET 5 вышла и девятая версия C#. Официальную страничку с изменениями вы можете найти на сайте Microsoft, но давайте попробуем разобраться — что именно здесь стоит внимания?

Самое заметное изменение — это record-типы, позволяющие избавиться от бойлерплейта при написании DTO. Записи — это иммутабельные ссылочные типы с простым и коротким объявлением. В них по умолчанию определены методы Equals, HashCode, Copy, Clone, PrintMembers и ToString — разумеется, все они используют значения полей типа для выполнения операций. То есть Equals корректно сравнивает две записи по значениям, а не по ссылке.

Также записи поддерживают синтаксис копирования с изменением значений полей через with, например:

var person = new Person < FirstName = "Mads", LastName = "Nielsen" >; var otherPerson = person with < LastName = "Torgersen" >;

Больше о применении записей вы можете почитать в блоге Владимира Хорикова и в публикации от Konrad Kokosa.

Другое важное изменение — это обновленный pattern matching. Теперь паттерны могут настраиваться по типам и операторам сравнения, причем несколько разных сравнений вы можете объединять через логические операторы. Например:

DeliveryTruck t when t.GrossWeightClass switch < < 3000 =>10.00m - 2.00m, >= 3000 and 10.00m, > 5000 => 10.00m + 5.00m >

Остальные изменения не столь заметны — они касаются верхнеуровневых программ (возможность писать короткие программы без базового класса и функции main), упрощенного синтаксиса для new (без указания типа), init-only сеттеров и прочего.

Последние изменения в новом C#, которые хотелось бы упомянуть — это расширенная поддержка для source generators. Этот функционал позволяет генерировать код при компиляции проекта и зачастую очень удобен для авторов библиотек. В новом релизе работу с генераторами кода сделали чуть проще, расширив функционал partial классов (с них сняли некоторые из старых ограничений) и добавив инициализаторы модулей (методы, которые вызываются до первого доступа к любому полю/методу модуля).
Хороший пример работы с генераторами кода вы можете найти в этой статье на Medium.

Отдельно стоит рассказать про F# 5. В новой версии языка добавилась масса классных возможностей для скриптов (например, директива для подключения nuget пакетов), slicing для более удобной работы с данными, а также улучшилась работа с quotation expressions и computation expressions. А еще сильно улучшился интероп с C# и перфоманс. Словом, новый релиз выглядит интересно и делает F# потенциально полезнее в продакшене. Полное описание всех изменений можно найти на сайте Microsoft.

Коротко — язык оброс разнообразным сахаром. Самое заметное изменение в C# 9 — это записи, но едва ли оно само по себе стоит обновления. С другой стороны, если вы будете обновлять версию дотнета по каким-то другим причинам, то у вас появится новый функционал, делающий язык чуть более мощным. Мелочь, а приятно.

Прочее

Помимо глобальных улучшений платформы Microsoft также неплохо поработали над отдельными библиотеками.

Например, в новой версии дотнета сильно улучшилась поддержка десктопа. WinForms и WPF наконец-то получили все преимущества .NET Core — классный перфоманс, упаковка всего приложения в один .exe, работа без установленного на машине дотнета и… и нет, не кроссплатформенность. Все это работает только под Windows.

Помимо прочего, для десктопной разработки под Windows также добавили нормальный визуальный дизайнер, тулинг, новые контролы и улучшенную поддержку для старых. Словом — если вы разрабатываете приложения с использованием WinForms или WPF, ваша жизнь станет лучше.

С кроссплатформенностью все осталось по-прежнему. Релиз MAUI перенесли на .NET 6, а других решений для кроссплатформенного десктопа Microsoft пока не предлагает. Так что продолжаем использользовать Авалонию (или можно обратить свое внимание на Uno Platform — перспективно выглядящий фреймворк для разработки на все и сразу).

Еще больше улучшений появилось для фулстек веб-разработки с использованием Blazor. Главное из них это улучшения производительности — Microsoft обещают, что WebAssembly версия Blazor ускорится аж в три раза. Одной из основных причин такого роста производительности стал пререндер на стороне сервера. А еще добавили ленивую подгрузку зависимостей, изоляцию CSS/JS в рамках файла, новые контролы и многое другое. В общем, если вы собирались попробовать Blazor, но все никак не доходили руки — сейчас он выглядит куда более production-ready технологией.

image

Из оставшихся изменений заметнее всего смотрятся те, которые призваны помочь микросервисам и работе с облачными сервисами в целом. Здесь и уменьшение размеров Docker-контейнеров, и улучшенная поддержка gRPC, и поддержка OpenAPI по умолчанию, и многое другое. Кстати, Azure полностью поддерживает .NET 5 со дня релиза.

А еще Microsoft выкатили Project Tye, который как раз является инструментом для удобного управления микросервисами. На текущий момент трудно сказать, стоит ли использовать Tye в продакшене, но обратить внимание и поиграться с ним в свободное время определенно нужно.

Коротко — Microsoft улучшили поддержку отдельных инструментов и добавили приятных фич для облака. Если вы используете WinForms, WPF или Blazor — обновиться определенно стоит.

Миграция

Давайте разберемся, насколько сложно будет мигрировать ваше приложение с .NET Core 3 на .NET 5?

Гайд по миграции от Microsoft говорит нам, что основные сложности в миграции коснутся приложений на Blazor, там произошло много ломающих изменений. Для большинства же остальных приложений понадобится просто обновить версию дотнета в application.json, файл проекта и версии зависимостей. А еще адрес докер-контейнера с .NET 5 немного отличается от соответствующего адреса для .NET 3.1:

docker pull mcr.microsoft.com/dotnet/core/aspnet:3.1 docker pull mcr.microsoft.com/dotnet/aspnet:5.0

Другие отзывы о миграции, которые я смог найти — например, вот этот гайд от Alexandre Malavasi и твит о миграции Fusion от Александра Якунина — тоже говорят, что миграция проходит без каких-то специфических трудностей. Я также не столкнулся с особыми проблемами, пока мигрировал свои проекты и демки на новый дотнет. В любом случае, перед миграцией на новую версию советую внимательно изучить список ломающих изменений. А еще стоит посмотреть доклад про миграцию с .NET Conf.

Итого

Подведем итоги. Стоит ли мигрировать на новый дотнет и ради чего?

Кажется, самое важное, ради чего стоит заморачиваться — это перфоманс. Ускорили практически все и достаточно заметно. Как на низком уровне — через улучшения в GC и JIT — так и на уровне отдельных частей фреймворка. Так что, если вы хотите выиграть в производительности, стоит как минимум попробовать обновить версию фреймворка и замерить, насколько ускорились основные сценарии.

Другие важные причины для миграции — это улучшения для Blazor и WPF/WinForms. Если вы используете любой из этих фреймворков, стоит попробовать перейти на .NET 5, все же изменения достаточно заметные и полезные. Однако стоит учитывать, что для Blazor миграция выйдет достаточно непростой.

C# 9 определенно не является серьезным мотивом для переезда на новый дотнет, но принесет с собой приятных обновлений синтаксиса за компанию‎. В то же время и рекорды, и паттерн матчинг добавляют много возможностей сделать код более запутанным — советую обсудить это в команде и решить, как лучше использовать (или не использовать) их в проекте.

И на этом все! Удачной миграции на новый дотнет. Оставайтесь на связи, мы вернемся с более подробными материалами про современные возможности дотнета.

Что нового в .NET 5?

10 ноября 2020 года, буквально за 5 минут до начала ежегодной онлайн конференции .NET Conf 2020, обновилась страница загрузки .NET 5.0 . Свершилось то, чего давно ждали .NET разработчики всего мира. Какого-либо сюрприза не случилось – все нововведения и улучшения были известны задолго до этого момента. Мы видели ранее .NET 5 RC1 и RC2 в сентябре и октябре 2020 года. Многие уже успели попробовать .NET 5 в своих проектах. Тем не менее, момент выпуска .NET 5 подытожил огромную работу, которую проделали разработчики Microsoft совместно со множеством авторов open source сообщества github.

Вскоре после официального релиза .NET 5 вышло обновление Visual Studio 2019 update 16.8 с полной поддержкой всех возможностей нового фреймворка. Также опубликованы Docker образы для .NET 5 и .NET 5 SDK.

Что мы получили с выходом .NET 5? В первую очередь это объединение зоопарка фреймворков – теперь нет Core, Mono, Xamarin – теперь у нас есть единый .net5 target. Фактически, .net5 target пришел на замену netcoreapp и netstandard. Дополнительно мы можем выбрать операционную систему, например: net5.0-android, net5.0-ios, или net5.0-windows (https://github.com/dotnet/designs/blob/main/accepted/2020/net5/net5.md). Фреймворк стал действительно кроссплатформенным. У нас есть базовый набор классов и зависимые от конкретной операционной системы дополнения. В частности, для Windows у нас есть поддержка привычного WinForms, который был выпущен и обкатан ранее в .NET Core 3.1.

В .NET 5 проведена большая работа по оптимизации как непосредственно производительности приложений, так и скорости компиляции исходного кода. Теперь мы сможем немного ускорить прохождение наших тестов и ночных сборок в CI.

Что касается производительности кода, то в тестах по количеству gRPC запросов в секунду приложение .NET 5 занял второе место после Rust и опередил программный код, скомпилированный Go (диаграмма из блога).

Следующим по значимости новшеством .NET 5, безусловно, стало включение новой версии языка C# 9. Наиболее интересным нововведением я считаю появление записей (records). Новый синтаксис сильно упрощает описание неизменяемых моделей данных по сравнению с традиционными классами. Мы получили простой синтаксис декларации и инициализации.

public record Animal
public string? Name < get; init; >
public string? Areal < get; init; >
>
var brownBear = new Animal < Name = "Bear", Areal = "Siberia" >;
var whiteBear = animal with < Areal = "Arctic" >;

В новшествах языка также можно отметить возможность написания кода программы без использования функции main().

using System.Console;
WriteLine(«Hello World!»);

В состав .NET 5 также вошли языки F# 5 и Visual Basic. Последний несколько ограничен по возможностям по сравнению с основными языкам, но тем не менее – Microsoft продолжает его поддерживать.

Мне показалось интересным включение в состав .NET 5 инсталлятора ClickOnce. Теперь есть возможность публикации приложения в виде установочного пакета, который впоследствии можно запустить на нужном компьютере и развернуть там приложение. В состав инсталла может быть включен весь фреймворк целиком. Это увеличит объем дистрибутива, но упростит установку на неподготовленный компьютер.

Также мы получили продолжение развития возможности создания Single File Application, знакомой нам с .NET Core 3.1. Можно создать единый исполняемый файл, который содержит в себе все библиотеки с возможностью внедрения, в том числе всех используемых библиотек фреймворка. Теперь файлы стали меньше, и они быстрее запускаются.

Фреймворк Blazor, вошедший в состав .NET получил множество улучшений. Среди них изоляция CSS, которая позволит управлять стилями каждого компонента и предотвратит конфликты со стилями других компонентов и библиотек.

Новая экосистема .NET будет иметь статус LTS (Long Time Support) только для четных версий. Так, например, .NET 5 не будет иметь статуса долговременной поддержки, а .NET 6 будет. Иными словами, мы увидим следующие выпуски: .NET 6 LTS, .NET 7, .NET 8 LTS и т.д.

Это далеко не все новшества .NET 5. Это всего лишь основные моменты, которые мне запомнились. Нововведений намного больше и писать о них можно много и долго. Возможно, я напишу продолжение или отдельные статьи с рассмотрением конкретных примеров и вариантов использования .NET 5 в реальных приложениях.

Что теперь будет с .NET Framework 4.8? Ничего. Его дальнейшая разработка замораживается, будут выходить только критические обновления.

Также брошены оказались Web Forms и WCF – вместо них предлагается использовать ASP.NET Core Blazor и gRPC, соответственно.

Мы получили вторую жизнь для Windows Forms в составе .NET 5 (начало было положено в .NET Core 3.1). Будет ли расширена поддержка WinForms на операционные системы Linux и macOS .NET 6? Поживём-увидим. В любом случае, перевод приложений WinForms на фреймворк .NET 5 может упростить дальнейшую миграцию на ожидаемый в будущем Blazor Desktop.

В заключение хочу сказать, что была проделана большая работа и в виде .NET 5 мы получили реального конкурента платформе Java и многим другим решениям для разработки Enterprise приложений. С нетерпением ждем от команды разработки .NET новых фич, исправления ошибок и недочетов.

Со своей стороны мы подготовились к выходу .NET 5 — наши библиотеки FastReport .NET Core и FastReport Open Source FastReport Open Source поддерживают .NET Standard 2.1 и уже могут быть использованы в составе приложений с использованием .NET 5. В дальнейшем мы планируем расширение поддержки WinForms для .NET 5. У нас уже есть соответствующие наработки для .NET Core 3.1.

Спасибо за внимание, let’s run .NET 5!

Автор: Александр Федяшов

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *