微软发布了 .NET Core 2.2 版本,主要包含对运行时的诊断改进,对 ARM32 for Windows 和 Azure Active Directory for SQL Client 的支持。此版本最大的改进是在 ASP.NET Core 中。你可以在 Windows、macOS 和 Linux 上下载并开始使用 .NET Core 2.2:
ASP.NET Core 2.2 和 Entity Framework Core 2.2 也已发布。
下载:
Visual Studio 15.9、Visual Studio for Mac 和 Visual Studio Code 已支持 .NET Core 2.2 。
更新亮点:分层编译(Tiered Compilation)
分层编译是一种使运行时能够更自适应地使用实时(JIT)编译器,以在启动时获得更好的性能并最大化吞吐量的功能。该功能在 .NET Core 2.1 中是可选的,然后在 .NET Core 2.2 Preview 2 中默认启用。不过开发团队认为还没有准备好在正式的 .NET Core 2.2 版本中默认启用它,所以已将其切换回可选功能。
分层编译有望在 .NET Core 3.0 中默认启用。
运行时事件(Runtime Events)
我们通常需要监视运行时服务(如当前进程的 GC,JIT 和 ThreadPool ),以了解这些服务在运行应用程序时的行为方式。在 Windows 系统上,这通常使用 ETW 监视当前进程的 ETW 事件来完成。虽然这种方法仍然有效,但使用 ETW 并不总是很容易。在一些低权限环境中,或是在 Linux、macOS 上,都可能无法使用 ETW 。
从 .NET Core 2.2 开始,可以使用 EventListener 类来使用 CoreCLR 事件。这些事件描述了 GC,JIT,ThreadPool 和 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"); } }
SqlConnection 支持 AccessToken
SQL Server 的 ADO.NET provider —— SqlClient,现在支持将 AccessToken 属性设置为使用 Azure Active Directory 以对 SQL Server 连接进行身份验证。要使用此功能,你可以使用 Microsoft.IdentityModel.Clients.ActiveDirectory NuGet 包中包含的 Active Directory Authentication Library for .NET 获取 access token value 。
使用 Azure Active directory 验证 SQL Server 连接示例:
// get access token using ADAL.NETvar authContext = new AuthenticationContext(authority);var authResult = await authContext.AcquireTokenAsync(appUri, clientCredential);// setup connection to SQL Servervar sqlConnection = new SqlConnection(connectionString);sqlConnection.AccessToken = authResult.AccessToken;await sqlConnection.OpenAsync();
此外,该版本还包含 Injecting code prior to Main,提供 Windows ARM32 支持等特性。
适用平台:
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+; available in January)
完整详细信息请查阅 .NET Core 2.2 发行说明。
我们很高兴地宣布发布.NET Core 2.2。它包括对运行时的诊断改进,对ARM32 for Windows和Azure Active Directory for SQL Client的支持。此版本中最大的改进是在ASP.NET Core中。
ASP.NET Core 2.2和Entity Framework Core 2.2。
您可以在Windows,macOS和Linux上下载并开始使用.NET Core 2.2:
Visual Studio 15.9,Visual Studio for Mac和Visual Studio Code 支持.NET Core 2.2 。
对于.NET Core和ASP.NET Core,可以在microsoft / dotnet上获得Docker镜像。
您可以在.NET Core 2.2发行说明中查看该发行版的完整详细信息。发行说明中包含相关说明,已知问题和解决方法。请在评论或dotnet / core#2098中报告您发现的任何问题。
感谢为.NET Core 2.2做出贡献的每个人。您已经帮助.NET Core成为更好的产品!
本次发布包含以下特性:
分层编译(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上运行,都可能无法使用ETW。
从.NET Core 2.2开始,现在可以使用EventListener类来使用CoreCLR事件。这些事件描述了GC,JIT,ThreadPool和interop的行为。它们是在Windows上作为CoreCLR ETW提供程序的一部分公开的相同事件。这允许应用程序使用这些事件或使用传输机制将它们发送到遥测聚合服务。
在SqlConnection中支持AccessToken
SQL Server的ADO.NET提供程序SqlClient现在支持将AccessToken属性设置为使用Azure Active Directory对SQL Server连接进行身份验证。要使用此功能,您可以使用Microsoft.IdentityModel.Clients.ActiveDirectory NuGet包中包含的Active Directory身份验证库for .NET获取访问令牌值。
以下示例显示如何使用Azure Active目录验证SQL Server连接:
有关更多信息,请参阅ADAL.NET和Azure Active Directory文档。
在Main之前注入代码
.NET Core现在可以在通过Startup Hook运行应用程序main方法之前注入代码。启动挂钩使主机可以在部署应用程序后自定义应用程序的行为,而无需重新编译或更改应用程序。
我们希望托管服务提供商定义自定义配置和策略,包括可能影响主入口点的加载行为的设置,例如AssemblyLoadContext行为。钩子可用于设置跟踪或遥测注入,设置回调以进行处理或其他依赖于环境的行为。钩子与入口点分开,因此不需要修改用户代码。
有关更多信息,请参阅主机启动挂钩
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上使用。
将在Docker Hub 上的microsoft / dotnet上为ARM32的Nanoserver提供Docker。
我们遇到了一个迟到的错误,阻止我们今天发布针对Windows ARM32的.NET Core版本。我们预计这些版本将在2019年1月的.NET Core 2.2.1中使用。
平台支持
以下操作系统支持.NET Core 2.2:
Windows客户端: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+
高山:3.7+
芯片支持如下:
Windows,macOS和Linux上的x64
Windows上的x86
Linux上的ARM32(Ubuntu 16.04 +,Debian 9+)
Windows上的ARM32(1809+; 1月份可用)