Five Things You Should Know About .NET 5
What's new in .NET 5? Learn how .NET Core and .NET Framework evolve into the new cross-platform framework.
Andrea Chiarelli
Senior Developer Advocate
Last Updated On: October 15, 2021
Five Things You Should Know About .NET 5
What's new in .NET 5? Learn how .NET Core and .NET Framework evolve into the new cross-platform framework.
Andrea Chiarelli
Senior Developer Advocate
Last Updated On: October 15, 2021
.NET 5, the successor of .NET Core 3.1 and .NET Framework 4.8, aims to provide .NET developers with a new cross-platform development experience. It puts order to the .NET universe fragmentation that has been arising over the years and brings new amazing features. Of course, you cannot learn all about .NET 5 right now, but you can focus on just five things to have a clear understanding of what is going on.
The Unified Platform
The first thing you have to know is that .NET 5 brings you a new unified vision of the .NET world.
If you have been working with .NET, you may be aware of its platform fragmentation since its first release in 2002. The .NET Framework was initially designed for Windows, but its runtime specification, also known as Common Language Infrastructure (CLI), was standardized as ECMA 335.
The standardization allowed anyone to create their own implementation of the .NET runtime. And in fact, a few of them appeared on the horizon: Mono for Linux-based systems, Silverlight for browser-based applications, .NET Compact and Micro frameworks for mobile and resource-constrained devices, and so on. Then, Microsoft decided to write .NET Core from scratch with cross-platform compatibility in mind.
These different implementations raised the need to understand where a .NET package could run on. Should you build different versions of your library to distribute it? The answer to this question was .NET Standard, i.e., a formal specification of the common APIs you should expect across CLI implementations. In other words, if you build your library for one specific .NET Standard, you'll be guaranteed it will run on all the runtimes that implement that specification.
You understand that, in this messy situation, the desired cross-implementation compatibility is not so easy to achieve. This is why .NET 5 appears on the scene.
The new .NET platform is the unified successor of the various .NET flavors: .NET Framework, .NET Standard, .NET Core, Mono, etc. It is officially the next version of .NET Core 3.1, but basically determines the end of .NET Framework, .NET Standard, and the other variants that caused big headaches to .NET developers.
.NET 5 provides a common set of APIs that aligns the different runtime implementations. This set of APIs is identified by the net5 . 0 Target Framework Moniker (TFM), which is the token you set in your .NET project to specify the target framework. This enables your application to run on any runtime implementation supporting .NET 5. However, you can still build applications for a specific platform. For example, to build an application that uses Windows API, you need to specify the net5 . 0 — windows TFM. This way, building a platform-specific application is your choice, not a choice depending on the runtime implementation you are using to develop your application.
Of course, achieving this unified platform required a significant effort and an internal architecture rearrangement. A few features have been removed from the core API set, as you will see later on, but the platform gained a general improvement in performance.
While the new .NET 5 comes with the platform unification goal, the initial plan changed because of COVID-19. In fact, .NET 5 sets the foundations of the unification, but it will be completed with .NET 6 in November 2021. With that release, you will get the stable release of the new Universal UI and support for the specific TFMs for Android ( net6 . 0 — android ) and iOS ( net6 . 0 — ios ), for example.
Tweet This
New Features in C#
The second thing you should know is about C#. .NET 5 comes with C# 9, the new version of the .NET platform's main programming language. There are several new features, but here you will find a taste of the most relevant ones.
Top-level statements
Among the new features, one of the most notable is the introduction of top-level statements. To learn what they are, take a look at the following classic minimal program:
Just to write one string to the console, you need to define a namespace, a class, and the static method Main ( ) . Now, you can get rid of this code infrastructure and simply write the following:
Top-level statements allow you to focus on what really matters in small console programs and utilities and use C# with a more scripting-oriented approach.
Record types
Another interesting new feature is record types. With records, you can declare an immutable reference type, i.e., a class-based type that cannot be changed after its creation. An example of a built-in immutable reference type is the System . String class. After you create an instance of a System . String , you cannot change its value anymore.
Consider the following record type declaration:
You can create an instance of the Person record as you do with a class, but you can't change its FirstName property:
However, you can compare two instances of the Person record similarly to primitive values:
Init setters
C# 9 also adds the init accessor to define properties that can only be initialized. To better explain its use cases, consider the following class definition:
This class defines a person with LastName and FirstName properties that can be initialized, but not changed. The Address property can be changed at any time:
If you want to learn more about the features brought by C# 9, please check out the official documentation.
.NET MAUI, the Universal UI
As the third thing, you have to know that .NET 5 is bringing to you a new way to build cross-platform user interfaces. Thanks to the .NET Multi-platform App UI framework, also known as .NET MAUI), you will be able to build user interfaces for Android, iOS, macOS, and Windows with a single project.
Actually, this feature is still in progress and will be released with .NET 6, but you can start taking a look at .NET MAUI to be ready when it is officially released. Take a look at the roadmap to follow its progress.
.NET MAUI can be considered an evolution of Xamarin.Forms, the open-source framework for building iOS and Android apps with a single .NET codebase. But this new framework proposes a universal model for building UIs on mobile and desktop platforms.
In addition to the well-known Model-View-ViewModel (MVVM) pattern, .NET MAUI supports the new Model-View-Update (MVU) pattern. This is a one-way data flow pattern inspired by the Elm programming language architecture that provides an effective way to manage UI updates and application state.
Supporting Single-File Applications
The fourth thing you will get in .NET 5 is the support of single-file applications, that is, applications published and deployed as a single file. That means that your application and all its dependencies are bundled into one file. For example, say you run the following command within the folder of your .NET 5 project:
You will get a single file containing your application built for Linux, all the dependencies you used in your project, and the .NET runtime ( — self — contained true ). This means that you even don't need to install the .NET runtime on the target machine.
Of course, you can also specify these parameters in your project configuration:
Be aware that this feature doesn't use the same approach as the single-file applications you can build in .NET Core 3.1. In .NET Core 3.1, the single-file application is just a way to package binaries. At run time, they are unpackaged to a temporary folder, loaded, and executed. In .NET 5, the single-file application has a new internal structure, and it is directly executed with no performance penalty.
Take a look at the documentation to learn more about this deployment type.
No Longer Supported Technologies
The last of the five things you are learning about .NET 5 concerns what is no longer supported. As said above, the architectural review and the attempt to make .NET 5 an actual cross-platform programming framework led to removing a few features supported in .NET Framework. Let's take a quick look at the removed features and the possible alternatives.
Web Forms
For a long time, ASP.NET Web Forms has been the main technology to build dynamic web UIs. However, it is not a secret that its lifetime was closely bound to .NET Framework's destiny. .NET Core doesn't support Web Forms, so the fact it is no longer supported in .NET 5 shouldn't actually be news.
However, you have a few alternatives to build web UIs. If you are building traditional web applications, Razor Pages are one of these alternatives. If you want to build single-page applications, you can use Blazor.
Windows Communication Foundation (WCF)
Even WCF, the traditional communication framework for Windows, is going to be deprecated. This may appear a bit shocking for the developers that have used it to build their service-oriented applications. However, it is pretty understandable if you realize that the primary goal of .NET 5 is becoming a cross-platform framework.
The alternative to WCF recommended by Microsoft is to migrate to gRPC. But if you are nostalgic about WCF or want to prepare a smooth transition, you can give the CoreWCF open-source project a try.
Windows Workflow Foundation
Finally, .NET 5 will not even include Windows Workflow Foundation, the workflow engine technology available in .NET Framework. There is no official replacement for this technology. However, you can use an open-source porting project, CoreWF, to attempt moving your existing workflows on .NET 5 or creating new ones.
Summary
At the end of this article, you have a high-level idea of how .NET 5 will impact your existing .NET projects and which opportunities the new platform is going to offer you. Maybe these highlighted five things may seem like little stuff, but they should allow you to find your way around this turning point in the .NET evolution.
While .NET 5 is out, many applications that need security rely on older versions of .NET. Here’s how you can secure an ASP.NET Core 3.x with Auth0. The same patterns should apply to .NET 5. Let us know in the comments if you bump into any difficulties.
Aside: Securing ASP.NET Core with Auth0
Securing ASP.NET Core applications with Auth0 is easy and brings a lot of great features to the table. With Auth0, you only have to write a few lines of code to get a solid identity management solution, single sign-on, support for social identity providers (like Facebook, GitHub, Twitter, etc.), and support for enterprise identity providers (like Active Directory, LDAP, SAML, custom, etc.).
On ASP.NET Core, you need to create an API in your Auth0 Management Dashboard and change a few things on your code. To create an API, you need to sign up for a free Auth0 account. After that, you need to go to the API section of the dashboard and click on "Create API". On the dialog shown, you can set the Name of your API as "Books", the Identifier as "http://books.mycompany.com", and leave the Signing Algorithm as "RS256".
After that, you have to add the call to services . AddAuthentication ( ) in the ConfigureServices ( ) method of the Startup class as follows:
In the body of the Configure ( ) method of the Startup class, you also need to add an invocation to app . UseAuthentication ( ) and app . UseAuthorization ( ) as shown below:
Make sure you invoke these methods in the order shown above. It is essential so that everything works properly.
Finally, add the following element to the appsettings . json configuration file:
Note: Replace the placeholders YOUR_DOMAIN and YOUR_AUDIENCE with the actual values for the domain that you specified when creating your Auth0 account and the Identifier you assigned to your API.
Andrea Chiarelli
Senior Developer Advocate
Andrea Chiarelli
Senior Developer Advocate
More like this
Follow the conversation
Powered by the Auth0 Community. Sign up now to join the discussion. Community links will open in a new window.
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
Вышел .NET 5. И что?
Несколько недель назад вышел .NET 5. На сайте Microsoft можно найти подробный анонс со всеми изменениями, но главный вопрос для меня, как для разработчика — и что с того? Что мне с выхода пятого дотнета, как я могу его использовать, есть ли смысл переходить на новую версию прямо сейчас? На эти вопросы я постараюсь ответить дальше.
Перфоманс
Изменения в перфомансе — это самая заметная часть релиза. О них много писали на сайте Microsoft и рассказывали на .NET Conf. Давайте посмотрим внимательнее и определимся, где, насколько и за счет чего выросла производительность.
Измерения перфоманса с этого скрина основаны на бенчмарках от 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 сериализации выглядят особенно впечатляюще. Только посмотрите на результаты бенчмарка по сериализации больших массивов!
Языковое
Вместе с .NET 5 вышла и девятая версия C#. Официальную страничку с изменениями вы можете найти на сайте Microsoft, но давайте попробуем разобраться — что именно здесь стоит внимания?
Самое заметное изменение — это record-типы, позволяющие избавиться от бойлерплейта при написании DTO. Записи — это иммутабельные ссылочные типы с простым и коротким объявлением. В них по умолчанию определены методы Equals, HashCode, Copy, Clone, PrintMembers и ToString — разумеется, все они используют значения полей типа для выполнения операций. То есть Equals корректно сравнивает две записи по значениям, а не по ссылке.
Также записи поддерживают синтаксис копирования с изменением значений полей через with, например:
Больше о применении записей вы можете почитать в блоге Владимира Хорикова и в публикации от Konrad Kokosa.
Другое важное изменение — это обновленный pattern matching. Теперь паттерны могут настраиваться по типам и операторам сравнения, причем несколько разных сравнений вы можете объединять через логические операторы. Например:
Остальные изменения не столь заметны — они касаются верхнеуровневых программ (возможность писать короткие программы без базового класса и функции main), упрощенного синтаксиса для new (без указания типа), init-only сеттеров и прочего.
Последние изменения в новом C#, которые хотелось бы упомянуть — это расширенная поддержка для source generators. Этот функционал позволяет генерировать код при компиляции проекта и зачастую очень удобен для авторов библиотек. В новом релизе работу с генераторами кода сделали чуть проще, расширив функционал partial классов (с них сняли некоторые из старых ограничений) и добавив инициализаторы модулей (методы, которые вызываются до первого доступа к любому полю/методу модуля).
Хороший пример работы с генераторами кода вы можете найти в этой статье на Medium.
Отдельно стоит рассказать про F# 5. В новой версии языка добавилась масса классных возможностей для скриптов (например, директива для подключения nuget пакетов), slicing для более удобной работы с данными, а также улучшилась работа с quotation expressions и computation expressions. А еще сильно улучшился интероп с C# и перфоманс. Словом, новый релиз выглядит интересно и делает F# потенциально полезнее в продакшене. Полное описание всех изменений можно найти на сайте Microsoft.
Прочее
Помимо глобальных улучшений платформы 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 технологией.
Из оставшихся изменений заметнее всего смотрятся те, которые призваны помочь микросервисам и работе с облачными сервисами в целом. Здесь и уменьшение размеров Docker-контейнеров, и улучшенная поддержка gRPC, и поддержка OpenAPI по умолчанию, и многое другое. Кстати, Azure полностью поддерживает .NET 5 со дня релиза.
А еще Microsoft выкатили Project Tye, который как раз является инструментом для удобного управления микросервисами. На текущий момент трудно сказать, стоит ли использовать Tye в продакшене, но обратить внимание и поиграться с ним в свободное время определенно нужно.
Миграция
Давайте разберемся, насколько сложно будет мигрировать ваше приложение с .NET Core 3 на .NET 5?
Гайд по миграции от Microsoft говорит нам, что основные сложности в миграции коснутся приложений на Blazor, там произошло много ломающих изменений. Для большинства же остальных приложений понадобится просто обновить версию дотнета в application.json, файл проекта и версии зависимостей. А еще адрес докер-контейнера с .NET 5 немного отличается от соответствующего адреса для .NET 3.1:
Другие отзывы о миграции, которые я смог найти — например, вот этот гайд от Alexandre Malavasi и твит о миграции Fusion от Александра Якунина — тоже говорят, что миграция проходит без каких-то специфических трудностей. Я также не столкнулся с особыми проблемами, пока мигрировал свои проекты и демки на новый дотнет. В любом случае, перед миграцией на новую версию советую внимательно изучить список ломающих изменений. А еще стоит посмотреть доклад про миграцию с .NET Conf.
Итого
Подведем итоги. Стоит ли мигрировать на новый дотнет и ради чего?
Кажется, самое важное, ради чего стоит заморачиваться — это перфоманс. Ускорили практически все и достаточно заметно. Как на низком уровне — через улучшения в GC и JIT — так и на уровне отдельных частей фреймворка. Так что, если вы хотите выиграть в производительности, стоит как минимум попробовать обновить версию фреймворка и замерить, насколько ускорились основные сценарии.
Другие важные причины для миграции — это улучшения для Blazor и WPF/WinForms. Если вы используете любой из этих фреймворков, стоит попробовать перейти на .NET 5, все же изменения достаточно заметные и полезные. Однако стоит учитывать, что для Blazor миграция выйдет достаточно непростой.
C# 9 определенно не является серьезным мотивом для переезда на новый дотнет, но принесет с собой приятных обновлений синтаксиса за компанию. В то же время и рекорды, и паттерн матчинг добавляют много возможностей сделать код более запутанным — советую обсудить это в команде и решить, как лучше использовать (или не использовать) их в проекте.
И на этом все! Удачной миграции на новый дотнет. Оставайтесь на связи, мы вернемся с более подробными материалами про современные возможности дотнета.
Релиз Microsoft .NET 5.0: Улучшения производительности и поддержка Windows ARM64 и WebAssembly
Microsoft сообщает, что .NET 5.0 «значительно» улучшает производительность, поставляется с языковыми улучшениями и теперь поддерживает платформы Windows ARM64 и WebAssembly.
Анонс новой версии был сделан на мероприятии .NET Conf 2020, целью которого было освещение новых возможностей для разработчиков. Также 10 ноября состоялся релиз ASP.Net Core, EF Core, C# 9 и F# 5.
Microsoft представила .NET 5.0 еще в мае 2019 года с намерением подготовить релиз к ноябрю 2020 года. Крупные обновления .NET теперь будут выходить ежегодно в ноябре. Так, например, релиз .NET 6.0 намечен на ноябрь 2021 года. Поддержка .NET 5.0 будет осуществляться до февраля 2022 года (т.е. еще примерно три месяца после выхода .NET 6.0).
Для использования .NET 5.0 на компьютерах с Windows требуется Visual Studio 16.8 или более поздняя версия. Разработчикам, использующим mac OS, нужна последняя версия Visual Studio для Mac. Расширение C# и Visual Studio Code уже поддерживают .NET 5.0 и C# 9.
Ключевые изменения и улучшения .NET 5.0
- Множественные улучшения производительности. Microsoft опубликовала подробный анализ с результатами тестов. Алгоритм сортировки и производительность компилятора Just in Time значительно увеличились.
- Повышена производительность библиотек .NET, например сериализация JSON, регулярные выражения, HTTP.
- Снижение задержки P95 благодаря улучшениям в таких областях, как сборка мусора или многоуровневая компиляция.
- Улучшены варианты развертывания приложений, например образы контейнеров Server Core, однофайловые приложения и уменьшенные размеры образов контейнеров.
- Добавлена поддержка платформ Windows ARM64 и WebAssembly.
- Улучшения языков C# 9 и F# 5.
В официальном блоге «.NET Blog» Microsoft опубликовала пост с подробными изменениями, в котором представлена дополнительная информация о новых функциях и улучшениях .NET 5.0. Примечания к выпуску последних обновлений .NET Core доступны на сервисе GitHub.
Скачать новую версию можно на официальном сайте загрузок .NET 5.0 или на нашем сайте. На ресурсе доступны SDK и среды выполнения для всех поддерживаемых операционных систем.