4 декабря вышел .NET Core 2.2. «Кого можно удивить новостью недельной давности?» — спросите вы и будете правы… и кстати, вы уже обновились? )


Теперь по делу. Новый релиз включает улучшения диагностики в рантайме, поддержку ARM32 для Windows и поддержку Azure Active Directory для SQL Client. Наибольшие улучшения этого релиза коснулись ASP.NET Core.



В этот же день были выпущены ASP.NET Core 2.2 and Entity Framework Core 2.2.


.NET Core 2.2 для Windows, macOS и Linux уже ждут вас по ссылкам:



Поддержка .NET Core 2.2 присутствует в Visual Studio 15.9, Visual Studio for Mac and Visual Studio Code.


Docker-контейнеры доступны по адресу microsoft/dotnet как для .NET Core, так и для ASP.NET Core.


Наиболее полную информация по этому релизу можно прочитать в .NET Core 2.2 release notes. Там есть дополнительные инструкции, известные проблемы и способы их обойти. Пожалуйста, сообщите нам о любых недостатках, найденных в этом документе, в комментариях к dotnet/core #2098.


Tiered Compilation


Многоуровневая компиляция — это фича, позволяющая рантайму более умно использовать JIT-компилятор для достижения лучшего перформанса как на этапе запуска приложения, так и на этапе максимизации производительности в ходе его работы. Возможность делать это была добавлена как опциональная фича в .NET Core 2.1 и впоследствии по умолчанию включилась в .NET Core 2.2 Preview 2. Мы подумали и решили, что все еще не уверены в осмысленности ее включения в финальном релизе .NET Core 2.2, поэтому снова сделали ее опциональной, так же как было в .NET Core 2.1. Однако в .NET Core 3.0 мы собираемся перейти на нее окончательно.


Runtime Events


Обычно имеет смысл мониторить сервисы рантайма, например, GC, JIT или ThreadPool текущего процесса, чтобы понять, как эти сервисы ведут себя по ходу жизни приложения. На системах с Windows это обычно делается с помощью ETW и мониторинга событий ETW для текущего процесса. Этот способ все еще отлично работает, но использовать ETW не всегда возможно, а когда возможно — это бывает непросто. Например, вы выполняетесь в среде с недостаточным уровнем привилегий или на Linux/macOS.


Начиная с .NET Core 2.2 события CoreCLR могут обрабатываться классом EventListener. Эти события описывают поведение GC, JIT, ThreadPool и интеропа. Это те же самые события, которые сейчас доступны как часть провайдера CoreCLR ETW для Windows. Такой подход позволяет приложениям обрабатывать события или использовать транспортные механизмы для рассылки событий сервису агрегации телеметрии.


Вот так можно подписаться на события:


internal sealed class SimpleEventListener : EventListener
  {
      // Вызывается в момент создания EventSource.
      protected override void OnEventSourceCreated(EventSource eventSource)
      {
          // Смотрим за EventSource для .NET runtime и подключаем весь список событий.
          if (eventSource.Name.Equals("Microsoft-Windows-DotNETRuntime"))
          {
                  EnableEvents(eventSource, EventLevel.Verbose, (EventKeywords)(-1));
          }
      }

      // Вызывается в момент регистрации события.
      protected override void OnEventWritten(EventWrittenEventArgs eventData)
      {
          // Распечатываем содержимое события в консоль.
          Console.WriteLine($"ThreadID = {eventData.OSThreadId} ID = {eventData.EventId} Name = {eventData.EventName}");
          for (int i = 0; i < eventData.Payload.Count; i++)
          {
              string payloadString = eventData.Payload[i] != null ? eventData.Payload[i].ToString() : string.Empty;
              Console.WriteLine($"\tName = \"{eventData.PayloadNames[i]}\" Value = \"{payloadString}\"");
          }
          Console.WriteLine("\n");
      }
}

Поддержка AccessToken в SqlConnection


Провайдер ADO.NET для SQL Server, SqlClient, теперь поддерживает установку свойства AccessToken, которое позволяет производить аутентификацию соединений до SQL Server с помощью Azure Active Directory. Чтобы начать пользоваться этой фичей, нужно получить токен доступа с помощью Active Directory Authentication Library for .NET, которая идёт в поставке NuGet пакета Microsoft.IdentityModel.Clients.ActiveDirectory.


Вот как можно аутентифицировать соединения до SQL Server с помощью Azure AD:


// получаем следующий токен, используя ADAL.NET
var authContext = new AuthenticationContext(authority);
var authResult = await authContext.AcquireTokenAsync(appUri, clientCredential);
// подключаемся к SQL Server
var sqlConnection = new SqlConnection(connectionString);
sqlConnection.AccessToken = authResult.AccessToken;
await sqlConnection.OpenAsync();

Больше информации можно получить из документации по ADAL.NET и the Azure Active Directory.


Запуск кода до выполнения Main


.NET Core теперь позволяет встраивать код до запуска основного метода, и это делается с помощью Startup Hook. Эти хуки позволяют хостингу настраивать поведение приложения после того, как оно было развернуто, без необходимости пересборки или изменения кода.


Здесь мы подразумеваем, что провайдеры хостинга будут создавать свои собственные конфигурации и политики, включая настройки, которые потенциально смогут влиять на поведение загрузки главной точки входа в приложение, например, AssemblyLoadContext. Хук может использоваться для настройки трейсинга или внедрения телеметрии, подключения коллбэков или любых других настроек поведения, специфичных для конкретной среды исполнения. Хуки являются сущностью совершенно отдельной по отношению к точке входа и поэтому не требуют изменения кода приложения.


Более подробное описание есть в документации.


Windows ARM32


Мы добавляем поддержку Windows ARM32, аналогичную той, что уже существует для Linux ARM32, начиная с .NET Core 2.1. Windows уже некоторое время поддерживает WIN32, благодаря Windows IoT Core. Являясь частью релиза Windows Server 2019, поддержка ARM32 добавлена и в Nanoserver. .NET Core теперь может использоваться как на Nanoserver, так и на IoT Core.


Докерные контейнеры Nanoserver для ARM32, как всегда, появятся в microsoft/dotnet на Docker Hub.


Мы хотели бы опубликовать сборки .NET Core для Windows ARM32 прямо сегодня, но споткнулись о запоздалый баг, который делает их публикацию бессмысленной. Надеемся, что сборки появятся для .NET Core 2.2.1 где-то в январе 2019.


Поддерживаемые платформы


.NET Core 2.2 поддерживается на следующих операционных системах:


  • Windows Client: 7, 8.1, 10 (1607+)
  • Windows Server: 2008 R2 SP1+
  • macOS: 10.12+
  • RHEL: 6+
  • Fedora: 26+
  • Ubuntu: 16.04+
  • Debian: 9+
  • SLES: 12+
  • openSUSE: 42.3+
  • Alpine: 3.7+

Поддерживаемые аппаратные платформы:


  • x64 — Windows, macOS, and Linux
  • x86 — Windows
  • ARM32 — Linux (Ubuntu 16.04+, Debian 9+)
  • ARM32 — Windows (1809+; available in January)

Заключение


.NET Core 2.2 — это релиз, в котором появились важнейшие улучшения платформы. Мы всячески рекомендуем попробовать его и рассказать, что вы о нём думаете. Кроме того, имеет смысл разобраться в улучшениях в ASP.NET Core 2.2 и Entity Framework 2.2.


Не забывайте, что билеты на DotNext с первого января подорожают. Personal — на тысячу, а Standard — на две тысячи. Подробности про Early Bird — на сайте.

Комментарии (6)


  1. alhel
    14.12.2018 17:33

    А когда будет поддержка авторизации в Active Directory без Azure или LDAP?


    1. olegchir Автор
      14.12.2018 17:43

      Это не ко мне, чукча писатель, а не читатель :-) Вопрос ждет своих героев.


    1. AgentFire
      16.12.2018 00:37

      я в core не мастак, но разве там нет DirectoryEntry для этого?..


  1. AirLight
    14.12.2018 21:31
    +1

    Я уточню, ASP.NET Core 2.2 вышел не в тот же день, что и .NET Core 2.2, а является его частью.


    1. olegchir Автор
      14.12.2018 21:34

      Да, и про него вторая часть :-)


  1. a-tk
    15.12.2018 15:21

    А когда 3.0?..