• .NET Core 2.2发布 快来看看新版本有哪些新特性
  • 发布于 2个月前
  • 1203 热度
    2 评论
  • ATTMI
  • 0 粉丝 4 篇博客
  •   
我们很高兴地宣布.NET Core 2.2版本正式发布。它包括对运行时诊断的改进、对 Windows 的 ARM32 和 SQL 客户端的 Azure Active Directory 的支持。此版本中最大的改进是 ASP.NET Core。ASP.NET Core 2.2 以及 Entity Framework Core 2.2 也在今天发布。您可以在 Windows、MacOS 和 Linux 上下载并开始使用.NET Core 2.2。
.NET Core 2.2 SDK (includes the runtime)
https://dotnet.microsoft.com/download/dotnet-core/2.2
.NET Core 2.2 Runtime
https://dotnet.microsoft.com/download/dotnet-core/2.2
.NET Core 2.2 支持 Visual Studio 15.9,Visual Studio for Mac 以及 Visual Studio Code。
.NET Core 以及 ASP.NET Core 的Docker 镜像在 microsoft/dotnet
您可以在.NET Core 2.2 发行说明(https://github.com/dotnet/core/blob/master/release-notes/2.2/README.md)中看到相关说明、已知问题和变通办法。请在评论中报告你发现的任何问题,或在这里提交问题:https://github.com/dotnet/core/issues/2098


.NET Core 2.2的主要新特性有:


0.分层编译
分层编译是一项功能, 它使运行时能够更自适应地使用实时 (JIT) 编译器, 以便在启动时获得更好的性能并最大限度地提高吞吐量。它被添加为.NET Core 2.1中的可选的功能,然后在.NET Core 2.2  preview 2中默认启用。我们还没有完全准备好在默认情况下在最终的.NET Core 2.2 版本中启用它,因此我们将其切换回可选,就像.NET Core 2.1 一样。默认情况下, 它在.NET Core 3.0 中启用,我们希望它保留在该配置中。

1.运行时事件
通常需要监视运行时服务 (如当前进程的GC、JIT和线程池),以了解这些服务在运行应用程序时的行为。在 Windows 系统上,这通常使用 ETW 和监视当前进程的 ETW 事件来完成。虽然这可以继续很好地工作,但使用 ETW 并不总是方便的,也不总是可用的。比如您是在低全新环境中运行, 或者是在 Linux 或 MacOS上运行,都可能无法使用 ETW。

从.NET Core 2.2开始,现在可以用EventListener来使用CoreCLR 事件。这些事件描述了 GC、JIT、线程池和interop的行为。它们作为 Windows 上 CoreCLR ETW提供程序的一部分公开的事件。这允许应用程序使用这些事件或使用传输机制将它们发送到遥测聚合服务。
您可以在下面的代码示例中看到如何订阅事件:
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");
   }
}
2.在SqlConnection中支持AccessToken

SQL Server 的 ADO.NET 提供程序 SqlClient 现在支持设置 AccessToken 属性以使用 Azure Active Directory 对 SQL Server连接进行身份验证。为了使用该功能, 您可以使用 Microsoft.IdentityModel.Clients.ActiveDirectory NuGet 的 Active Directory身份验证库获取访问令牌。
下面的示例演示如何使用 Azure AD对SQL Server连接进行身份验证:
// 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(https://github.com/AzureAD/azure-activedirectory-library-for-dotnet/wiki)和Azure Active Directory文档(https://docs.microsoft.com/azure/active-directory/develop).

3.在 Main之前注入代码
.NET Core 现在可以在通过Startup Hook在运行应用程序Main方法之前注入代码。Startup Hook使主机能够在部署应用程序后自定义应用程序的行为,而无需重新编译或更改应用程序。

我们希望托管供应商定义自定义配置和策略,包括可能影响Main入口点的加载行为的设置,如AssemblyLoadContext行为。钩子可用于设置跟踪或遥测注入、设置用于处理的回调或其他与环境相关的行为。钩子与程序入口点是分开的,因此不需要修改用户代码。
有关详细信息, 请参阅Host startup hook。(https://github.com/dotnet/core-setup/blob/master/Documentation/design-docs/host-startup-hook.md)

4.Windows ARM32
我们正在添加对 Windows ARM32 的支持,类似于我们在. net core 2.1 中添加的 Linux ARM32 支持。Windows 已经在Windows IoT Core里支持 ARM32有一段时间了。作为 Windows Server 2019 版本的一部分,还为 Nanoserver 添加了 ARM32支持。.NET Core既可用于Nanoserver,也可用于IoT Core。
ARM32的Nanoserver Docker镜像会在microsoft/dotnet中由Docker Hub提供
我们遇到了一个迟来的bug它阻止了我们今天发布 Windows ARM32 的.NET Core 版本。我们预计这些版本将于2019年1月发布于.NET Core 2.2.1。

平台支持
.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 on Windows, macOS, and Linux
x86 on Windows
ARM32 on Linux (Ubuntu 16.04+, Debian 9+)

ARM32 on Windows (1809+; 1月份可用)


结尾

.NET Core 2.2 包括产品的主要改进。请试试并告诉我们你的想法。此外,请务必查看 ASP.NET Core 2.2 和Entity Framework 2.2 中的改进。

原文:Rich Lander (微软美国)

用户评论