В конце прошлого года мы выпустили .NET Core 3.0 и 3.1. В этих версиях добавлены модели настольных приложений Windows Forms (WinForms) и WPF, ASP.NET Blazor для создания одностраничных приложений и gRPC для кроссплатформенного обмена сообщениями на основе контрактов. Мы также добавили шаблоны для создания сервисов, крутое генерирование клиентского кода для общения с gRPC, сервисы REST API и многое другое. Мы рады, что .NET Core 3 стала самой быстро-принятой версией .NET, и за последний год у нас появился еще миллион пользователей.
Мы также работали над этими выпусками, чтобы завершить перенос моделей приложений из .NET Framework. В .NET Core 3 мы перенесли все наиболее используемые модели приложений, а также представили новые кроссплатформенные инфраструктуры вместо тех, которые не были портированы.
В ожидании следующего основного выпуска .NET 5 мы продолжим объединять .NET в единую платформу, включив нашу модель приложения для мобильных устройств .NET (Xamarin) в .NET 5. .NET 5 будет включать ASP.NET Core, Entity Framework Core, WinForms, WPF, Xamarin и ML.NET. Впервые вся платформа будет использовать унифицированный BCL (библиотеки базовых классов) для всех моделей приложений. Наличие версии 5, которая выше, чем у .NET Core и .NET Framework, также дает понять, что .NET 5 — это будущее .NET, единой унифицированной платформы для создания приложений любого типа.
Мы говорили это много раз, но мы еще раз повторим; .NET Core, а затем .NET 5 — это .NET, с помощью которого вам стоит создавать все свои новые приложения. .NET Framework будет поддерживаться до тех пор, пока поддерживается сама Windows. Мы будем продолжать обеспечивать безопасность и исправлять ошибки, а также обновлять сетевые и крипто API. Он будет оставаться безопасным и поддерживаться для работы ваших старых приложений на .NET Framework.
Установка .NET 5.0 Preview 1
Сегодня мы выпускаем первую Preview .NET 5, полноценный выход которой запланирован на конец этого года в ноябре.
Читайте обновления ASP.NET Core в .NET 5 Preview 1, чтобы узнать о сегодняшнем выпуске ASP.NET Core.
В Preview 1 впервые включена поддержка Windows ARM64. Сегодняшняя версия также включает в себя runtime .NET Core. Мы ожидаем, что в Preview 2 будет добавлен SDK (ядро ASP.NET, но не WPF или Windows Forms). Более поздний предварительный просмотр будет включать в себя WPF и Windows Forms. Поддержка Windows ARM64 также будет перенесена в .NET Core 3.1. Мы поделимся более подробной информацией об этом в посте о Preview 2.
Обновление существующих проектов
Вы можете обновить существующие проекты, обновив целевую платформу следующим образом:
<TargetFramework>netcoreapp5.0</TargetFramework>
Топ-цели .NET 5
- Унифицированный опыт .NET SDK:
- Один BCL (библиотека базовых классов) для всех приложений .NET 5. Сегодня приложения Xamarin используют Mono BCL, но перейдут на использование .NET Core BCL, улучшая совместимость между нашими моделями приложений.
- Мобильная разработка (Xamarin) интегрирована в .NET 5. Это означает, что .NET SDK будет поддерживать mobile. Например, вы можете использовать «dotnet new XamarinForms» для создания мобильного приложения.
- Нативные приложения, поддерживающие несколько платформ: проект «Одно устройство», который поддерживает приложение, которое может работать на нескольких устройствах, например Window Desktop, Microsoft Duo (Android) и iOS, с использованием собственных элементов управления, поддерживаемых на этих платформах.
- Веб-приложения, поддерживающие несколько платформ: один проект Blazor, который поддерживает приложение, которое может работать в браузерах, на мобильных устройствах и как собственное настольное приложение (например, Windows 10x).
- Собственные облачные приложения: высокопроизводительные микросервисы с одним файлом (.exe) <50 МБ и поддержка создания нескольких проектов (API, веб-интерфейсов, контейнеров) как локально, так и в облаке.
- Непрерывные улучшения, такие как: ускорение алгоритмов в BCL, улучшения поддержки контейнеров во время выполнения, поддержка HTTP3.
Preview 1 еще не содержит результатов всех этих целей, но мы будем продолжать анонсировать больше возможностей в будущих превью.
Улучшения в Preview 1
Следующие улучшения в Preview 1:
Улучшения производительности регулярных выражений
Мы вложили значительные средства в движок Regex. Во многих протестированных нами выражениях эти улучшения обычно приводят к повышению производительности в 3-6 раз, а в некоторых случаях и к гораздо большему. В скором времени у нас будет пост в блоге, в котором эти улучшения будут описаны более подробно.
Улучшение качества кода в RyuJIT
Каждый релиз включает набор улучшений производительности для кода, который генерирует JIT. Мы называем этот тип улучшений «CQ» или качество кода. В большинстве случаев эти улучшения также применяются к коду, созданному для готовых к запуску образов.
- Улучшения для фолдинга null checks – Удалите необходимость генерировать null checks в большем количестве случаев, наблюдая больше шаблонов, где null checks, вероятно, не нужны.
- Настройка общего подвыражения (CSE) – JIT ищет и сворачивает дублирующиеся выражения, которые нужно оценивать только один раз.
- Оптимизация «constant_string».Length – Оптимизация этого шаблона и свертывание кода до правильного целочисленного значения.
- JIT: создание базовых списков блоков перед морфингом – Переупорядочевание фазы в JIT, чтобы раньше можно было использовать ключевые оптимизации, что привело к лучшему качеству кода и меньшему количеству работы для следующих фаз, что увеличивает пропускную способность JIT («TP» в ссылочном PR).
Диагностика нагрузки сборки добавлена в event pipe
Мы добавили информацию о загрузке сборки в event pipe. Это улучшение — начало доступности аналогичных диагностических функций, которые являются частью .NET Framework с Fusion Log Viewer. Теперь вы можете использовать dotnet-trace для сбора этой информации, используя следующую команду:
dotnet-trace collect --providers Microsoft-Windows-DotNETRuntime:4:4 --process-id [process ID]
Рабочий процесс описан в разделе Trace Assembly Loading with Event Pipe. Вы можете увидеть информацию о загрузке сборки для простого тестового приложения.
API для профилирования событий (Event Pipe)
Event Pipe — это новая подсистема и API, которые мы добавили в .NET Core 2.2, чтобы сделать возможным выполнение диагностик производительности и других в любой операционной системе. В .NET 5.0 Event Pipe был расширен, чтобы профилировщики могли записывать события Event Pipe. Этот сценарий важен для инструментов профилировщиков, которые ранее использовали ETW для мониторинга поведения и производительности приложений.
Консолидация репозиториев GitHub
Как часть выпуска .NET 5, мы сократили количество репозиториев на GitHub, которые использовались для создания и упаковки .NET. Границы репозитория оказывают значительное влияние на многие аспекты проекта, включая сборку и управление проблемами. С .NET Core 1.0 у нас было более 100 репозиториев в ASP.NET, EF и .NET Core. Теперь все изменилось. Мы также перенесли почти все репозитории в dotnet org.
Ознакомьтесь с новыми, консолидированными репозиториями:
- dotnet/runtime (были dotnet/corefx, dotnet/coreclr, и dotnet/core-setup)
- dotnet/aspnetcore (было множество репозиториев в aspnet org)
- dotnet/sdk (были dotnet/sdk, dotnet/cli)
Автор: Александр Гуреев