Обновляемся на .NET Core 2.1
Не так давно Microsoft выпустила новую версию Фреймворка .NET Core 2.1. И совсем недавно вышла ее LTS
версия с трехлетней поддержкой. В этой статье я бы хотел сделать небольшой обзор изменений, а также рассказать, как обновиться до новой версии.
Обзор изменений.
Поддержка новых платформ.
.NET Core стал еще кроссплатформеннее! Добавилась поддержка Linux 3.7+
, ARM32
, IoT
, RaspberryPI 2+
, Ubuntu 18.04
.
Вот полный список изменений:
- Windows Client: 7, 8.1, 10 (1607+)
- Windows Server: 2008 R2 SP1+
- macOS: 10.12+
- RHEL: 6+
- Fedora: 26+
- Ubuntu: 14.04+
- Debian: 8+
- SLES: 12+
- openSUSE: 42.3+
- Alpine: 3.7+
- RaspberryPI 2+
А Аптимизация.
В новой версии этот параметр получил очень хороший буст. По заверениям Microsoft скорость работы приложений вырастет более чем на 30% а в больших можно будет заметить десятикратный прирост производительности(!). Компания не обошла стороной и процесс сборки проекта, благодаря чему этот показатель тоже улучшился: время сборки крупных проектов значительно сократилось.
В .NET Core 2.1
появилась многоуровневая компиляция
(Tiered compilation
). Зачастую возникают ситуации, когда определённый участок программы выполняется всего один или несколько раз, и время, потраченное на оптимизацию, превосходит время на выполнение. При многоуровневой компиляции код обрабатывается с минимальными затратами времени. После этого компилятор отслеживает наиболее употребляемые методы и оптимизирует именно их (ура мы дожили до этого момента).
Новые типы Span<T>
, Memory<T>
также помогут в оптимизации приложений, снизив нагрузку на память. Например, тип Span <T>
позволяет передать часть массива, не делая его копии. Кроме того, в .NET Core 2.1 добавилась поддержка алгоритма сжатия brotli
, поддерживаемого большинством браузеров, серверов и CDN.
Огласите весь список, пожалуйста:
- Увеличенную скорость сборки проекта.
- Увеличенную скорость работы в run-time. Разработчики обещают, что прирост на больших проектах может быть вплоть до 10-кратного (по сравнению с .NET Core 2.0).
- Улучшенная производительность классов, связанных с обработкой сетевых запросов.
- Типы
Span<T>
,Memory<T>
- Поддержку алгоритма сжатия
Brotli
(типBrotliStream
) - Изменения коснулись так же криптографического API
- Появился Windows Compatibility Pack – это библиотека (доступна на NuGet), которая упрощает портирование .NET кода на .NET Core. Она предоставляет доступ к API которые отсутствуют в самом .NET Core.
Новые функции
Пожалуй, самая классная вещь – это Глобальные утилиты .NET Core
(.NET Core Global Tools
). Такой а-ля APT менажер, но только для консольных утилит .NET Core. С его помощью пользователь может установить утилиты с помощью команды dotnet tool install
:
И потом запускать их с помощью команды:
Вот, к слову, годная статья на хабре про эту вкусняшку.
Список нововведений\изменений в .NET Core 2.1:
- SignalR – уже хорошо известная в .NET библиотека для обмена сообщениями межу веб-сервером и клиентами в реальном времени.
- Библиотеки классов Razor – возможность создавать библиотеки, которые содержат Razor страницы.
- Поддержка
Identity UI
– позволяет добавлять страница авторизации в приложения (использует библиотеку Razor). - HTTPS теперь включен по умолчанию.
- Добавлена возможность написания функциональных тестов для MVC, которые будут выполняться в памяти
- Поддержка Generic Host позволяет создавать не только web-приложения, но и другие типы проектов.
- Атрибут
[ApiController]
и классActionResult<T>
позволят создавать более понятные API IHttpClientFactory
– это фабрика, предоставляющая HttpClient как сервис.- В Kestrel заменили libuv на управляемые сокеты.
- Шаблоны проектов изменены согласно требованиям GDPR.
- Улучшены SPA шаблоны для Angular, React и React + Redux.
- Глобальные утилиты .NET Core
Entity Framework Core 2.1
Вместе с NET Core 2.1 вышел Entity Framework Core 2.1:
- Поддержка GroupBy в LINQ
- Поддержка
System.Transactions
- Конструкторы сущностей теперь могут иметь параметры.
- Поддержка приведения значений. Если раньше сущности могли содержать только типы, которые имени аналоги в базе данных, то теперь возможно приведение некоторых типов к известным. Например: значения
enum
могут быть записаны и загружены из поля типа“строка”
. При этом значение перечисления будет преобразовано в строку, а при загрузке – наоборот. (а раньше для этого приходилось изобретать велосипеды… Папример пимать структуру данных BiMap…) - Возможность задать начальные данные для таблиц
- Стали доступны новые типы запросов без первичного ключа (primary key). Например для загрузки данных из представлений (view).
- Атрибут
[Owned]
для указания вложенных типов (будут добавлены в содержащую их модель). - Улучшена оптимизация подзапросов.
- Отложенная загрузка (Lazy Loading), которая была доступна в обычном Entity Framework.
Как обновиться?
Все очень просто! .NET Core 2.1 имеет полную совместимость с .NET Core 2.0, поэтому изменения в коде не нужны. Для обновления вам обновить Visual Studio 2017 до последней актуальной версии, а в свойствах проекта изменить целевую платформу на .NET Core 2.1
. Если вы пользуетесь Visual Code (или используете Linux) – вам необходимо скачать и установить .NET Core 2.1 SDK, и изменить целевую платформу в *.csproj
файле проекта.
Также стоит обновить пакет Entity Framework (если он используется). Также прикреплю ссыдку на статью блоге dotnet
Успешного обновления.