Обновляемся на .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:
dotnet tool install -g <name>И потом запускать их с помощью команды:
<command name>Вот, к слову, годная статья на хабре про эту вкусняшку.
Список нововведений\изменений в .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 файле проекта.
<PropertyGroup>
...
<TargetFramework>netcoreapp2.1</TargetFramework>
...
</PropertyGroup>Также стоит обновить пакет Entity Framework (если он используется). Также прикреплю ссыдку на статью блоге dotnet
Успешного обновления.