Новые возможности .NET Core 5
.NET 5 — это следующий основной выпуск .NET Core после выпуска 3.1. Мы назвали этот новый выпуск .NET 5, а не .NET Core 4, по двум причинам:
- Мы пропустили номера версий 4. x, чтобы избежать путаницы с .NET Framework 4.x.
- Мы удалили "Core" из имени, чтобы подчеркнуть, что с настоящего момента это основная реализация .NET. .NET 5 поддерживает больше типов приложений и больше платформ, чем .NET Core или .NET Framework.
ASP.NET Core 5.0 основана на .NET 5, но у нее сохраняется имя "Core", чтобы избежать путаницы с ASP.NET MVC 5. Аналогичным образом у Entity Framework Core 5.0 сохраняется имя "Core", чтобы избежать путаницы с Entity Framework 5 и 6.
В .NET 5 включены следующие улучшения и новые функции по сравнению с .NET Core 3.1:
- Обновления C#
- Обновления F#
- Обновления Visual Basic
- Новые функции System.Text.Json
- Приложения с одним файлом
- Обрезка приложений
- Встроенные компоненты Windows Arm64 и Arm64
- Поддержка средств для отладки дампа
- Библиотеки среды выполнения на 80 % совместимы с ссылочными типами, допускающими значение NULL
- Улучшения производительности:
.NET 5 не заменяет .NET Framework
.NET 5 и более поздних версий — это основная реализация .NET, но платформа .NET Framework 4.x по-прежнему поддерживается. Переносить приведенные ниже технологии с .NET Framework на .NET 5 не планируется, но в .NET существуют альтернативные решения.
Технология | Рекомендуемое альтернативное решение |
---|---|
Веб-формы | ASP.NET Core Blazor или Razor Pages |
Рабочий процесс Windows (WF) | Elsa-Workflows |
Windows Communication Foundation
Исходная реализация Windows Communication Foundation (WCF) поддерживалась только в Windows. Однако есть клиентский порт, доступный из .NET Foundation. Это полностью открытый код, кроссплатформенный и поддерживаемый корпорацией Майкрософт. Ниже перечислены основные пакеты NuGet.
- System.ServiceModel.Duplex
- System.ServiceModel.Federation
- System.ServiceModel.Http
- System.ServiceModel.NetTcp
- System.ServiceModel.Primitives
- System.ServiceModel.Security
Серверные компоненты, дополняющие перечисленные выше упоминание клиентские библиотеки, доступны через CoreWCF. По состоянию на апрель 2022 года CoreWCF официально поддерживается корпорацией Майкрософт. Однако для альтернативы WCF рассмотрим gRPC.
.NET 5 не заменяет .NET Standard
Разработка новых приложений может указать net5.0
Moniker Target Framework (TFM) для всех типов проектов, включая библиотеки классов. Упрощено совместное использование кода между рабочими нагрузками .NET 5: все, что вам нужно, — net5.0
это TFM.
Для приложений и библиотек net5.0
.NET 5 TFM объединяет и заменяет netcoreapp
и netstandard
TFM. Однако если планируется совместное использование кода рабочими нагрузками .NET Framework, .NET Core и .NET 5, это можно сделать, указав netstandard2.0
в качестве TFM. Дополнительные сведения см. в статье .NET Standard.
Обновления C#
Разработчики, создающие приложения .NET 5, получат доступ к последним версиям и функциям C#. .NET 5 связан с языком C# 9, в котором предоставлено множество новых функций. Вот некоторые из них.
Записи: ссылочные типы с семантикой равенства на основе значений и неразрушительной мутацией, поддерживаемой новым
with
выражением.Сопоставление реляционных шаблонов: расширяет возможности сопоставления шаблонов реляционным операторам для сравнения вычислений и выражений, включая логические шаблоны — новые ключевое слово
and
,or
иnot
.Операторы верхнего уровня: как средство ускорения внедрения и обучения C#,
Main
метод можно опустить, а приложение так же просто, как показано в следующем примере:System.Console.Write("Hello world!");
Указатели функций: языковые конструкции, предоставляющие следующие коды опкодов
ldftn
промежуточного языка (IL): иcalli
.
Дополнительные сведения о доступных функциях C# 9 см. в разделе Новые возможности C# 9.
Генераторы исходного кода
Генераторы исходного кода, как и другие новые функции C#, становятся частью процесса разработки проектов. Генераторы исходного кода позволяют коду, который выполняется во время компиляции, проверять программу и создавать дополнительные файлы, компилируемые вместе с остальной частью кода.
Дополнительные сведения о генераторах исходного кода см. в статьях Введение в генераторы исходного кода C# и Примеры генераторов исходного кода C#.
Обновления F#
F# — это язык функционального программирования .NET, и с помощью .NET 5 разработчики имеют доступ к F# 5. Одна из новых функций — интерполированные строки, аналогичные интерполированным строкам в C#, и даже JavaScript.
let name = "David"
let age = 36
let message = $"{name} is {age} years old."
Помимо обычной интерполяции строк, существует типизированная интерполяция. При использовании типизированной интерполяции заданный тип должен соответствовать спецификатору формата.
let name = "David"
let age = 36
let message = $"%s{name} is %d{age} years old."
Этот формат аналогичен sprintf
функции, которая форматирует строку на основе типобезопасных входных данных.
Дополнительные сведения см. в статье Новые возможности в F# 5.
Обновления Visual Basic
В .NET 5 отсутствуют новые языковые функции Visual Basic. Однако в .NET 5 поддержка Visual Basic расширена:
Description | dotnet new параметр |
---|---|
Консольное приложение | console |
Библиотека классов | classlib |
Приложение WPF | wpf |
Библиотека классов WPF | wpflib |
Библиотека настраиваемых элементов управления WPF | wpfcustomcontrollib |
Библиотека пользовательских элементов управления WPF | wpfusercontrollib |
Приложение Windows Forms (WinForms) | winforms |
Библиотека классов для Windows Forms (WinForms) | winformslib |
Проект модульного теста | mstest |
Тестовый проект NUnit 3 | nunit |
Элемент теста NUnit 3 | nunit-test |
Тестовый проект xUnit | xunit |
Дополнительные сведения о шаблонах проектов из интерфейса командной строки .NET см. в разделе dotnet new
.
Новые функции System.Text.Json
В System.Text.Json имеются новые функции:
- Сохранение ссылок и обработка циклических ссылок
- Методы расширения HttpClient и HttpContent
- Разрешение или запись чисел в кавычках
- Поддержка неизменяемых типов и записей C# 9
- Поддержка методов доступа к свойствам, не являющимся общедоступными
- Поля поддержки
- Свойства с условным игнорированием
- Поддержка словарей без строкового ключа
- Разрешение пользовательским преобразователям обработки значения NULL
- Копирование JsonSerializerOptions
- Создание JsonSerializerOptions с помощью веб-параметров по умолчанию