net core 5 что нового
Technology | Recommended alternative |
---|---|
Web Forms | ASP.NET Core Blazor or Razor Pages |
Windows Workflow (WF) | Elsa-Workflows |
Windows Communication Foundation
The community maintains the server components that complement the aforementioned client libraries. The GitHub repository can be found at CoreWCF. The server components are not officially supported by Microsoft. For an alternative to WCF, consider gRPC.
C# updates
Records: reference types with value-based equality semantics and non-destructive mutation supported by a new with expression.
Top-level statements: As a means for accelerating adoption and learning of C#, the Main method can be omitted and application as simple as the following is valid:
For more information on the available C# 9 features, see What’s new in C# 9.
Source generators
In addition to some of the highlighted new C# features, source generators are making their way into developer projects. Source generators allow code that runs during compilation to inspect your program and produce additional files that are compiled together with the rest of your code.
F# updates
In addition to basic string interpolation, there’s typed interpolation. With typed interpolation, a given type must match the format specifier.
This is similar to the sprintf function that formats a string based on type-safe inputs.
For more information, see What’s new in F# 5.
Visual Basic updates
Description | dotnet new parameter |
---|---|
Console Application | console |
Class library | classlib |
WPF Application | wpf |
WPF Class library | wpflib |
WPF Custom Control Library | wpfcustomcontrollib |
WPF User Control Library | wpfusercontrollib |
Windows Forms (WinForms) Application | winforms |
Windows Forms (WinForms) Class library | winformslib |
Unit Test Project | mstest |
NUnit 3 Test Project | nunit |
NUnit 3 Test Item | nunit-test |
xUnit Test Project | xunit |
Технология | Рекомендуемое альтернативное решение |
---|---|
веб-формы | ASP.NET Core Blazor или Razor Pages |
Рабочий процесс Windows (WF) | Elsa-Workflows |
Windows Communication Foundation
Сообщество поддерживает серверные компоненты, дополняющие вышеупомянутые клиентские библиотеки. Репозиторий GitHub можно найти на странице CoreWCF. Серверные компоненты официально не поддерживаются корпорацией Майкрософт. В качестве альтернативы WCF можно рассмотреть gRPC.
Обновления C#
Операторы верхнего уровня: для ускорения внедрения и изучения C# метод Main можно опустить. Приведенное ниже простое приложение все равно будет работать.
Дополнительные сведения о доступных функциях C# 9 см. в разделе Новые возможности C# 9.
Генераторы исходного кода
Генераторы исходного кода, как и другие новые функции C#, становятся частью процесса разработки проектов. Генераторы исходного кода позволяют коду, который выполняется во время компиляции, проверять программу и создавать дополнительные файлы, компилируемые вместе с остальной частью кода.
Дополнительные сведения о генераторах исходного кода см. в статьях Введение в генераторы исходного кода C# и Примеры генераторов исходного кода C#.
Обновления F#
Помимо обычной интерполяции строк, существует типизированная интерполяция. При использовании типизированной интерполяции заданный тип должен соответствовать спецификатору формата.
Дополнительные сведения см. в статье Новые возможности в F# 5.
Обновления Visual Basic
Описание | Параметр 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 |
Новые возможности в ASP.NET Core 5.0
В этой статье описываются наиболее важные изменения в ASP.NET Core 5.0 со ссылками на соответствующую документацию.
Улучшения ASP.NET Core MVC и Razor
Привязка модели DateTime в формате UTC
Привязка модели и проверка с помощью типов записей C# 9
Типы записей C# 9 можно использовать с привязкой модели в контроллере MVC или на странице Razor. Типы записей — это хороший способ моделирования передаваемых по сети данных.
Например, в следующем контроллере PersonController используется тип записи Person с привязкой модели и проверкой формы:
Усовершенствования DynamicRouteValueTransformer
В ASP.NET Core 3.1 появился DynamicRouteValueTransformer в качестве способа использования пользовательской конечной точки для динамического выбора действия контроллера MVC или страницы Razor. Приложения ASP.NET Core 5.0 могут передавать состояние в DynamicRouteValueTransformer и фильтровать выбранный набор конечных точек.
Прочее
Веб-интерфейс API
Спецификация OpenAPI включена по умолчанию
Спецификация OpenAPI является отраслевым стандартом для описания API-интерфейсов HTTP и их интеграции в сложные бизнес-процессы или со сторонними производителями. OpenAPI широко поддерживается всеми поставщиками облачных служб и многими реестрами API. В приложениях, создающих документы OpenAPI из веб-API, представлено множество новых возможностей, в которых можно использовать эти API-интерфейсы. В условиях партнерства с издателями проекта Swashbuckle.AspNetCore с открытым кодом шаблон API для ASP.NET Core содержит зависимость NuGet от Swashbuckle. Swashbuckle — это популярный пакет NuGet с открытым кодом, который динамически создает документы OpenAPI. Он выполняет это путем самоанализа через контроллеры API и создания документа OpenAPI во время выполнения или во время сборки, используя интерфейс командной строки Swashbuckle.
В ASP.NET Core 5.0 шаблоны веб-API по умолчанию поддерживают OpenAPI. Чтобы отключить OpenAPI:
Из командной строки.
Из Visual Studio: снимите флажок Enable OpenAPI support (Включить поддержку OpenAPI).
Все файлы .csproj, созданные для проектов веб-API, содержат ссылку на пакет NuGet Swashbuckle.AspNetCore.
Метод Startup.Configure добавляет ПО промежуточного слоя Swashbuckle, которое активирует:
Созданный шаблоном код не станет по случайности предоставлять описание API при публикации в рабочей среде.
Импорт Управления API Azure
Если проекты API для ASP.NET Core включают OpenAPI, Visual Studio 2019 версии 16.8 и более поздних публикаций автоматически предлагают дополнительный этап в потоке публикации. Разработчики, использующие Управление API Azure, имеют возможность автоматического импорта API-интерфейсов в Управление API Azure во время потока публикации:
Улучшенный интерфейс запуска для проектов веб-API
Если OpenAPI включен по умолчанию, интерфейс запуска приложений (F5) для разработчиков веб-API значительно улучшается. В ASP.NET Core 5.0 шаблон веб-API предварительно настроен для загрузки страницы пользовательского интерфейса Swagger. На странице пользовательского интерфейса Swagger содержится документация, добавленная для опубликованного API, и обеспечивается тестирование API-интерфейсов одним щелчком мыши.
Blazor
Усовершенствования в области производительности
Изоляция CSS
Теперь Blazor поддерживает определение стилей CSS, областью действия которых является данный компонент. Благодаря стилям CSS для отдельных компонентов проще ориентироваться в стилях в приложении и избежать непредвиденных побочных эффектов от применения глобальных стилей. Для получения дополнительной информации см. Изоляция CSS в ASP.NET Core Blazor.
Новый компонент InputFile
Компонент InputFile позволяет считывать один или несколько файлов, выбранных пользователем для отправки. Для получения дополнительной информации см. Отправка файлов в ASP.NET Core Blazor.
Новые компоненты InputRadio и InputRadioGroup
Виртуализация компонентов
Повысьте воспринимаемую производительность отрисовки компонентов с помощью встроенной поддержки виртуализации платформы Blazor. Для получения дополнительной информации см. Виртуализация компонентов ASP.NET Core Blazor.
Поддержка события ontoggle
Установка фокуса пользовательского интерфейса в приложениях Blazor
Используйте удобный метод FocusAsync со ссылками на элемент, чтобы установить фокус пользовательского интерфейса на этот элемент. Для получения дополнительной информации см. Обработка событий Blazor в ASP.NET Core.
Настраиваемые атрибуты класса проверки CSS
Настраиваемые атрибуты класса проверки CSS полезны при интеграции с платформами CSS, такими как Bootstrap. Для получения дополнительной информации см. Формы и проверка ASP.NET Core Blazor.
Поддержка IAsyncDisposable
Теперь компоненты Blazor поддерживают интерфейс IAsyncDisposable для асинхронного выпуска выделенных ресурсов.
Изоляция JavaScript и ссылки на объекты
Поддержка компонентами форм отображаемого имени
Для получения дополнительной информации см. Формы и проверка ASP.NET Core Blazor.
Параметры маршрута catch-all
В компонентах поддерживаются параметры маршрута catch-all, которые захватывают пути в нескольких папках. Для получения дополнительной информации см. Маршрутизация ASP.NET Core Blazor.
Усовершенствования отладки
В ASP.NET Core 5.0 улучшена отладка приложений Blazor WebAssembly. Кроме того, сейчас отладка поддерживается в Visual Studio для Mac. Для получения дополнительной информации см. Отладка в ASP.NET Core Blazor WebAssembly.
Microsoft Identity версии 2.0 и MSAL версии 2.0
Теперь для безопасности Blazor используется Microsoft Identity версии 2.0 ( Microsoft.Identity.Web и Microsoft.Identity.Web.UI ) и MSAL версии 2.0. Дополнительные сведения см. в статье о безопасности Blazor и узле Identity.
Защищенное хранилище браузера для Blazor Server
Теперь приложения Blazor Server могут использовать встроенную поддержку для хранения сведений о состоянии приложения в браузере, который уже защищен от незаконного изменения благодаря защите данных в ASP.NET Core. Данные могут храниться либо в локальном хранилище браузера, либо в хранилище сеансов. Для получения дополнительной информации см. Управление состоянием ASP.NET Core Blazor.
Предварительная отрисовка Blazor WebAssembly
Улучшенная обрезка и компоновка
Blazor WebAssembly выполняет обрезку и компоновку промежуточного языка (IL) во время сборки, чтобы затем удалить ненужный IL из выходных сборок приложения. В выпуске ASP.NET Core 5.0 Blazor WebAssembly выполняет улучшенную обрезку с помощью дополнительных параметров конфигурации. Дополнительные сведения см. в статьях Настройка средства обрезки для ASP.NET Core Blazor и Параметры обрезки.
Анализатор совместимости с браузерами
Сборки с отложенной загрузкой
Производительность запуска приложения Blazor WebAssembly можно повысить, отложив загрузку некоторых сборок приложений, пока они не потребуются. Для получения дополнительной информации см. Сборки с отложенной загрузкой в ASP.NET Core Blazor WebAssembly.
Обновленная поддержка глобализации
Поддержка глобализации доступна для Blazor WebAssembly на основе ICU (международных компонентов для Юникода). Для получения дополнительной информации см. Глобализация и локализация в ASP.NET Core Blazor.
SignalR
Фильтры концентраторов SignalR
Фильтры концентраторов SignalR, называемые конвейерами концентраторов в ASP.NET SignalR, — это возможность, которая позволяет выполнять код до и после вызова методов концентратора. Выполнение кода до и после вызова методов концентратора аналогично тому, как ПО промежуточного слоя может выполнять код до и после HTTP-запроса. Распространенные варианты использования включают ведение журнала, обработку ошибок и проверку аргументов.
Параллельные вызовы концентраторов SignalR
ASP.NET Core SignalR теперь может обрабатывать параллельные вызовы концентраторов. Поведение по умолчанию можно изменить, чтобы разрешить клиентам одновременно вызывать несколько методов концентратора:
Добавлена поддержка MessagePack в клиент Java для SignalR
Kestrel
Улучшения заголовков ответов HTTP/2. Дополнительные сведения см. в следующем разделе Улучшения в области производительности.
Параметры для конечной точки Kestrel с помощью конфигурации
Добавлена поддержка настройки параметров для каждой конечной точки Kestrel с помощью конфигурации. Конфигурации для каждой конечной точки включают:
Конфигурация позволяет определить, какой сертификат выбирается на основе указанного имени сервера. Имя сервера входит в состав расширения указания имени сервера для протокола TLS, как указано клиентом. Конфигурация Kestrel также поддерживает префикс подстановочного знака в имени узла.
В следующем примере показано, как задать для каждой конечной точки использование файла конфигурации:
Указание имени сервера — это расширение TLS для включения виртуального домена в состав согласования SSL. Это фактически означает, что виртуальное доменное имя или имя узла можно использовать для определения конечной точки сети.
Усовершенствования в области производительности
HTTP/2
Значительное сокращение распределений в пути к коду HTTP/2.
Поддержка динамического сжатия HPack заголовков ответов HTTP/2 в Kestrel. Дополнительные сведения см. в разделе Размер таблицы заголовка и записи блога HPACK: возможность Silent Killer в HTTP/2.
Отправка кадров проверки связи HTTP/2. HTTP/2 имеет механизм отправки кадров проверки связи, чтобы неактивное соединение по-прежнему работало. Обеспечение работоспособного соединения особенно полезно при работе с долгосрочными потоками, которые часто находятся в неактивном состоянии, но только периодически видят действия, например потоки gRPC. Приложения могут отправить периодические кадры проверки связи в Kestrel, установив ограничения на KestrelServerOptions:
Контейнеры
Аутентификация и авторизация
Проверка подлинности Azure Active Directory с помощью Microsoft.Identity.Web
Шаблоны проектов ASP.NET Core теперь интегрируются с Microsoft.Identity.Web для управления проверкой подлинности с помощью Azure Activity Directory (Azure AD). Пакет Microsoft.Identity.Web предоставляет:
Разрешение анонимного доступа к конечной точке
Метод расширения AllowAnonymous предоставляет анонимный доступ к конечной точке:
Пользовательская обработка сбоев авторизации
Авторизация при использовании маршрутизации конечных точек
Управление доступом на основе ролей с помощью проверки подлинности Kerberos и протокола LDAP в Linux
Усовершенствования API
Методы расширения JSON для HttpRequest и HttpResponse
Методы расширения JSON можно объединять с маршрутизацией конечных точек для создания API-интерфейсов JSON в стиле программирования, который мы называем маршрут к коду. Это новый вариант для разработчиков, которые хотят создавать базовые API-интерфейсы JSON простым способом. Например, веб-приложение, имеющее только несколько конечных точек, может использовать маршрут к коду, а не все функции MVC ASP.NET Core:
System.Diagnostics.Activity
System.Diagnostics.Activity теперь по умолчанию имеет формат W3C. Благодаря этому распределенная трассировка в ASP.NET Core поддерживает взаимодействие с другими платформами по умолчанию.
FromBodyAttribute
FromBodyAttribute теперь поддерживает настройку параметра, который позволяет считать такие параметры или свойства необязательными:
Прочие улучшения
Управление активацией класса Startup
Автоматическое обновление с помощью dotnet watch
Форматировщик средства ведения журнала консоли
Средство ведения журнала консоли JSON
Помимо поддержки пользовательских форматировщиков, мы также добавили встроенный форматировщик JSON, который выводит структурированные журналы JSON в консоли. В следующем примере кода показано, как переключиться со средства ведения журнала по умолчанию на JSON:
Сообщения журнала, выводимые на консоль, имеют формат JSON:
Перфоманс
Помимо результатов бенчмарков от TechEmpower, Microsoft также рассказывает и о других улучшениях. Например, сериализация JSON стала работать на 20% быстрее, а сериализация больших коллекций и массивов ускорилась аж в три раза.
За счет чего это происходит? В первую очередь, благодаря изменениям в GC, которые привели к уменьшению количества аллокаций и ускорению сборки мусора. Кстати, все эти изменения осуществляются одновременно с переписыванием GC на C#, а значит его код становится куда доступнее, понятнее и безопаснее. Подробности можно почитать в статье от Microsoft.
Другие изменения коснулись JIT компиляции, асинхронности и многих методов базовой библиотеки. Это касается методов, относящихся к работе со строками, регулярными выражениями и, что особенно важно, с коллекциями и сериализацией. Во все той же статье приводится много примеров таких изменений, с соответствующими пулл-реквестами и бенчмарками.
Изменения в JSON сериализации выглядят особенно впечатляюще. Только посмотрите на результаты бенчмарка по сериализации больших массивов!
Коротко — пятый дотнет сильно вырос в производительности и это важнейшая часть нового релиза. Большинство стандартных веб-приложений могут ожидать прирост производительности на 20% и выше, а отдельные приложения могут и вовсе ускориться в несколько раз.
Языковое
Самое заметное изменение — это 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.
Коротко — язык оброс разнообразным сахаром. Самое заметное изменение в C# 9 — это записи, но едва ли оно само по себе стоит обновления. С другой стороны, если вы будете обновлять версию дотнета по каким-то другим причинам, то у вас появится новый функционал, делающий язык чуть более мощным. Мелочь, а приятно.
Прочее
Помимо глобальных улучшений платформы Microsoft также неплохо поработали над отдельными библиотеками.
Помимо прочего, для десктопной разработки под Windows также добавили нормальный визуальный дизайнер, тулинг, новые контролы и улучшенную поддержку для старых. Словом — если вы разрабатываете приложения с использованием WinForms или WPF, ваша жизнь станет лучше.
Еще больше улучшений появилось для фулстек веб-разработки с использованием Blazor. Главное из них это улучшения производительности — Microsoft обещают, что WebAssembly версия Blazor ускорится аж в три раза. Одной из основных причин такого роста производительности стал пререндер на стороне сервера. А еще добавили ленивую подгрузку зависимостей, изоляцию CSS/JS в рамках файла, новые контролы и многое другое. В общем, если вы собирались попробовать Blazor, но все никак не доходили руки — сейчас он выглядит куда более production-ready технологией.
А еще Microsoft выкатили Project Tye, который как раз является инструментом для удобного управления микросервисами. На текущий момент трудно сказать, стоит ли использовать Tye в продакшене, но обратить внимание и поиграться с ним в свободное время определенно нужно.
Коротко — Microsoft улучшили поддержку отдельных инструментов и добавили приятных фич для облака. Если вы используете WinForms, WPF или Blazor — обновиться определенно стоит.
Миграция
Итого
Подведем итоги. Стоит ли мигрировать на новый дотнет и ради чего?
Кажется, самое важное, ради чего стоит заморачиваться — это перфоманс. Ускорили практически все и достаточно заметно. Как на низком уровне — через улучшения в GC и JIT — так и на уровне отдельных частей фреймворка. Так что, если вы хотите выиграть в производительности, стоит как минимум попробовать обновить версию фреймворка и замерить, насколько ускорились основные сценарии.
C# 9 определенно не является серьезным мотивом для переезда на новый дотнет, но принесет с собой приятных обновлений синтаксиса за компанию. В то же время и рекорды, и паттерн матчинг добавляют много возможностей сделать код более запутанным — советую обсудить это в команде и решить, как лучше использовать (или не использовать) их в проекте.
И на этом все! Удачной миграции на новый дотнет. Оставайтесь на связи, мы вернемся с более подробными материалами про современные возможности дотнета.
Исполняющие среды
Высокая производительность и продуктивность
JIT-компиляторы хорошо подходят для долго работающих облаков и клиентских сценариев. Они способны генерировать код, учитывающий особенности аппаратной конфигурации, в том числе специфические процессорные инструкции. Также JIT может заново генерировать методы во время исполнения, эта методика позволяет компилировать с высокой скоростью, в то же время создавая тонко настроенную версию кода, если какие-то методы используются часто.
Инструменты разработчиков — ещё одна сфера, в которой JIT прекрасно себя зарекомендовала, например, dotnet watch или режим “edit and continue”. Для работы инструментов часто требуется многократно компилировать и загружать код в одном и том же процессе без перезапуска, и делать это нужно очень быстро.
Быстрый запуск, низкое потребление ресурсов процессора (footprint) и уменьшение потребления памяти
Есть два типа AOT-решений:
AOT-компиляция останется необходимой для iOS, WebAssembly и некоторых игровых приставок. Мы сделаем её опциональной для приложений, которые встраиваются в технику (appliance-like), для которых требуется быстрый запуск и/или низкое потребление ресурсов процессора.
Основы и схожие требования
Для нас критически важно продолжать развиваться как платформа со средствами управления запуском, производительностью, потреблением памяти, надёжностью и диагностики. В то же время целесообразно сосредоточить наши усилия. Мы станем больше работать над повышением производительности и надежности в CoreCLR, а также над улучшением запуска и снижением размера файлов компиляторе Mono AOT. Нам это кажется хорошим сочетанием. Производительность и надежность идут рука об руку, как и скорость запуска со снижением размера файлов.
В улучшение одних характеристик целесообразно вкладывать разные ресурсы, а в улучшение других — нет.
Рождение проекта
Теперь мы двигаем проект как единая команда. С декабря мы далеко продвинулись в нескольких проектах: