gosha20777

Обновляемся на .NET Core 2.1

October 22, 2018 | 4 Minute Read

Не так давно 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

Успешного обновления.