آشنایی با امکانات ‎.Net Core 2.2

چند روز پیش نگارش نهایی ‎.Net Core 2.2 منتشر شد. این نگارش حاوی بهبود سیستم های خطایابی زمان اجرا، پشتیبانی از اجرا شدن بر روی ARM32 برای ویندوز، و Azure Active Directory برای کلاینت های SQL می باشد. بزرگترین تغییرات این نگارش در رابطه با ASP.NET Core است.

ASP.NET Core 2.2 و Entity Framework Core 2.2 نیز به همراه این ورژن از دات نت منتشر شدند. هم اکنون می توانید فایل های این نگارش نهایی را برای نصب و اجرا بر روی ویندوز، macOS و Linux از لینک های زیر دریافت کنید:

‎.Net Core 2.2 توسط Visual Studio 15.9 ، ‏Visual Studio for Mac و Visual Studio Code پشتیبانی می شود. Image های Docker آن نیز در microsoft/dotnet برای ‎.Net Core و ASP.NET Core موجود است.

شما می توانید جزئیات کامل تغییرات و موارد اضافه شده به این نگارش را در صفحه ‎.Net Core 2.2 Release Notes مشاهده کنید.  رهنمودهای مربوطه، مشکلات شناخته شده، و راهکارهای آنها در صفحه فوق مطرح شده است. لطفا اگر مشکلی را در رابطه با این نگارش مشاهده کردید آن را در بخش Comment ها یا در آدرس dotnet/core #2098 گزارش کنید.

Tiered Compilation

کامپایل کردن به صورت Tiered یک قابلیت جدید مفید است که به سیستم Runtime کمک می کند با استفاده از کامپایلر Just-In-Time (JIT) بازدهی بهتری هنگام شروع کامپایل و در حین انجام  آن دریافت کرد. این قابلیت به صورت یک گزینه دلخواه به ‎.Net Core 2.1 اضافه شده بود و سپس در ‎.Net Core 2.2 Preview 2 به عنوان گزینه پیش فرض فعال شد. بعد از آن تصمیم بر این شد که این قابلیت هنوز جهت عملیاتی شدن به عنوان رویه اصلی جهت استفاده در ‎.Net Core 2.2 آماده نیست، بنابراین مجددا استفاده از آن به عنوان یک گزینه دلخواه (و نه پیش فرض) تغییر کرد. در ‎.Net Core 3.0 این رویه کامپایل به صورت پیش فرض فعال خواهد بود و امید است که تصمیم فوق تا زمان انتشار ‎.Net Core 3.0 تغییری نکند.

رویدادهای زمان اجرا

برخورداری از امکان مانیتور کردن رویدادهای زمان اجرای برنامه، از جمله اطلاع یافتن از اتفاقاتی که هنگام استفاده از سرویس های Garbage Collector، ‏JIT و ThreadPool پروسس کنونی در برنامه شما رخ می دهد، قابلیت دوست داشتنی ای است. در سیستم های مبتنی بر ویندوز این امکان عمدتا از طریق ETW و مانیتور کردن رویدادهای ETW پروسس کنونی میسر است. با وجودی که ETW گزینه خوبی است، استفاده از آن همیشه آسان و حتی میسر نیست. ممکن است برنامه شما در حال اجرا در محیطی با دسترسی های کم (اجرا با استفاده از دسترسی های کاربری که Administrator نیست و دسترسی های آن محدود است، چنین حالتی در محیط های مبتنی بر Active Directory طبیعی است) در ویندوز، لینوکس، یا macOS باشد. در چنین حالت هایی نمی توانید از ETW استفاده کنید.

در ‎.Net Core 2.2 ، رویدادهای CoreCLR را می توان با استفاده از کلاس EventListener به کار گرفت. این رویدادها شرح رفتار GC ، ‏JIT ، ‏ThreadPool و Interop را در اختیار ما قرار می دهند. این رویدادها به از طریق CoreCLR ETW Provider در ویندوز منتشر می شوند. این رویه به ما اجازه می دهد این رویدادها را بکار ببریم، و یا آنها را به عنوان داده از طریق یک کانال انتقال داده به یک سرویس جمع آوری اطلاعات Telemetry در یک نقطه دیگر ارسال کنیم. چگونگی کسب اشتراک از این رویدادها را در نمونه کد زیر می توانید ببینید:

internal sealed class SimpleEventListener : EventListener
  {
      // Called whenever an EventSource is created.
      protected override void OnEventSourceCreated(EventSource eventSource)
      {
          // Watch for the .NET runtime EventSource and enable all of its events.
          if (eventSource.Name.Equals("Microsoft-Windows-DotNETRuntime"))
          {
                  EnableEvents(eventSource, EventLevel.Verbose, (EventKeywords)(-1));
          }
      }

      // Called whenever an event is written.
      protected override void OnEventWritten(EventWrittenEventArgs eventData)
      {
          // Write the contents of the event to the console.
          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

پروایدر SQL Server برای ADO.NET، یعنی کلاس SqlClient در نسخه جدید امکان استفاده از پراپرترتی AccessToken برای احراز هویت در Connection String با استفاده از Azure Active Directory را به ما می دهد. جهت استفاده از این قابلیت می توانید مقدار Access Token را با استفاده از کتابخانه Active Directory Authentication برای ‎.Net به دست بیاورید. این کتابخانه در قالب یک پکیج Nuget به نام Microsoft.IdentityModel.Clients.ActiveDirectory در دسترس قرار دارد.

نمونه کد زیر روش احراز هویت کانکشن استرینگ SQL Server با استفاده از Azure Active Directory را نشان می دهد:

// get access token using ADAL.NET
var authContext = new AuthenticationContext(authority);
var authResult = await authContext.AcquireTokenAsync(appUri, clientCredential);
// setup connection to SQL Server
var sqlConnection = new SqlConnection(connectionString);
sqlConnection.AccessToken = authResult.AccessToken;
await sqlConnection.OpenAsync();

برای کسب اطلاعات بیشتر ADAL.NET و مستندات Azure Active Directory را ببینید.

تزریق کد قبل از تابع Main

این ورژن از ‎.Net Core به شما اجازه می دهد تا کدی را قبل از تابع Main با استفاده از یک Startup Hook تزریق کنید. Start Hook ها به محیط های هاستینگ اجازه می دهند رفتار Application ها را پس از انتشار بدون نیاز به کامپایل مجدد یا تغییر در کد تغییر دهند.

ارائه دهنده گان خدمات هاستینگ با استفاده از این امکان می توانند پیکربندی های اختصاصی و Policy های خود، شامل تنظیماتی که می تواند بر Load شدن برنامه تاثیر بگذارد (مانند رفتار AssemblyLoadContext) را تعریف کنند. می توان با استفاده از Hook قابلیت Tracing و یا تزریق Telemetry را انجام داد، Callback های مورد نیاز، و یا رفتارهای وابسته به محیط را تعریف کرد. Hook از Entry Point برنامه جدا است، بنابراین نیازی نیست کد اصلی برنامه تغییری کند.

برای کسب اطلاعات بیشتر به مستندات Host Startup Hook مراجعه کنید.

Windows ARM32

همان طور که قبلا در ‎.Net Core 2.1 پشتیبانی از Linux ARM32 اضافه شده بود، پشتیبانی از Windows ARM32 نیز در این ورژن جدید اضافه شده است. ویندوز از مدتها پیش از ARM32 در Windows IoT Core پشتیبانی می کرد. پشتیبانی از ARM32 به Nanoserver نیز به عنوان یکی از امکانات Windows Server 2019 اضافه شده است. هم اکنون می توان از ‎.Net Core بر روی Nanoserver و IoT Core استفاده کرد.

به زودی Image ویژه Docker برای Nanoserver for ARM32 در microsoft/dotnet در Docker Hub ارائه خواهد شد.

کشف شدن یک باگ در آخرین لحظه پیش از انتشار باعث شده است Build های ‎.Net Core برای Windows ARM32 در حال حاضر منتشر نشود. انتظار می رود این Build ها به همراه ‎.Net Core 2.2.1 در ژانویه 2019 منتشر شوند.

پشتیبانی از Platform ها

‎.Net Core 2.2 در سیستم عامل های زیر پشتیبانی می شود:

  • ویندوز کلاینت: ورژن 7 ، 8.1 ، 10 (از 1067 به بعد)
  • ویندوز سرور: 2008‎ ‎R2 SP1 به بعد
  • macOS: از ورژن 10.12 به بعد
  • RHEL: از ورژن 6 به بعد
  • Fedora: از 26 به بعد
  • Debian: از 9 به بعد
  • SLES: از 12 به بعد
  • openSUSE: از ورژن 42.2 به بعد
  • Alpine: از ورژن 3.7 به بعد

در حال حاضر از CPU های زیر پشتیبانی می شود:

  • x64 بر روی ویندوز، macOS و Linux
  • x86 بر روی ویندوز
  • ARM32 بر روی لینوکس (Ubunto 16.04 به بعد، و Debian 9 به بعد)
  • ARM32 بر روی ویندوز (ورژن 1809 به بعد، که در ژانویه 2019 منتشر خواهد شد)

جمع بندی

‎.Net Core 2.2 حاوی بهبودهای اساسی است. لطفا آنها را تست کنید و نظرتان را به ما بگوئید. توصیه می شود مقاله های ما در زمینه ASP.NET Core 2.2 و Entity Framework Core 2.2 را نیز مطالعه کنید.

 

 

تگ ها:

‎‎.Net‎ 1 2.2 3 New Features 4 Core 3