.NET Core 2.2已发布。 最新消息 (3之1)

.NET Core 2.2于12月4日发布。 “一周前谁会对这个消息感到惊讶?” -您问,您将是正确的...顺便说一句,您是否已被更新? )


现在到案件。 新版本包括运行时的诊断改进,对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已在以下链接等着您:



Visual Studio 15.9 ,Mac版Visual Studio和Visual Studio Code中提供了对.NET Core 2.2的支持。


microsoft / dotnet上的 Docker容器可用于.NET Core和ASP.NET Core。


有关此版本的最完整信息,请参见.NET Core 2.2发行说明 。 还有其他说明,已知问题和解决方法。 请在dotnet / core#2098的注释中告知我们本文档中发现的任何缺陷。


分层编译


多层编译是一项功能,它允许运行时在应用程序启动阶段和运行期间最大化性能的阶段更智能地使用JIT编译器以实现更好的性能。 可以将此功能添加为.NET Core 2.1中的可选功能,然后在.NET Core 2.2 Preview 2中默认情况下处于启用状态。使其成为可选项,就像在.NET Core 2.1中一样。 但是,在.NET Core 3.0中,我们将完全切换到它。


运行时事件


通常,监视运行时服务(例如当前进程的GC,JIT或ThreadPool)是有意义的,以便了解这些服务在应用程序生命周期中的行为方式。 在Windows系统上,通常使用ETW并监视当前进程的ETW事件来完成此操作。 该方法仍然有效,但是使用ETW并非总是可行,并且在可能的情况下可能会很困难。 例如,您正在特权不足的环境中或在Linux / macOS上运行。


从.NET Core 2.2开始,CoreCLR事件可以由EventListener类处理。 这些事件描述了GC,JIT,ThreadPool和interope的行为。 这些事件现在可以作为Windows的CoreCLR ETW提供程序的一部分使用。 这种方法允许应用程序处理事件或使用传输机制将事件发送到遥测聚合服务。


您可以通过以下方式订阅事件:


 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"); } } 

SqlConnection中的AccessToken支持


SQL Server的ADO.NET提供程序SqlClient现在支持设置AccessToken属性,该属性允许使用Azure Active Directory验证到SQL Server的连接。 要开始使用此功能,您需要使用Microsoft.IdentityModel.Clients.ActiveDirectory的NuGet程序包附带的.NET Active Directory身份验证库来获取访问令牌。


以下是使用Azure AD对与SQL Server的连接进行身份验证的方法:


 //   ,  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.NETAzure Active Directory文档。


在Main之前运行代码


现在,.NET Core允许您在启动main方法之前嵌入代码,这是使用Startup Hook完成的。 这些挂钩使主机可以在部署应用程序后自定义应用程序的行为,而无需重建或修改代码。


在这里,我们的意思是托管提供者将创建自己的配置和策略,包括可能影响应用程序主入口点的加载行为的设置,例如AssemblyLoadContext。 该挂钩可用于设置跟踪或实施遥测,连接回调或特定于特定运行时环境的任何其他行为设置。 挂钩是相对于入口点而言完全独立的实体,因此不需要更改应用程序代码。


文档中有更详细的描述。


Windows ARM32


从.NET Core 2.1开始,我们将添加对Windows ARM32的支持,类似于对Linux ARM32已有的支持。 由于Windows IoT核心版 ,Windows已经支持WIN32已有一段时间了。 作为Windows Server 2019版本的一部分,ARM32支持已添加到Nanoserver中。 .NET Core现在可以在Nanoserver和IoT Core上使用。


与往常一样,用于ARM32的Nanoserver Docker容器将出现在Docker Hub上的microsoft / dotnet中


我们今天想为Windows ARM32发布.NET Core程序集,但是偶然发现了一个迟来的bug,使发布它们毫无意义。 我们希望程序集将在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+

支持的硬件平台:


  • x64-Windows,macOS和Linux
  • x86-Windows
  • ARM32-Linux(Ubuntu 16.04 +,Debian 9+)
  • ARM32-Windows(1809+;一月可用)

结论


.NET Core 2.2是具有主要平台增强功能的发行版。 我们强烈建议您尝试一下,并告诉我们您的想法。 此外,了解ASP.NET Core 2.2和Entity Framework 2.2中的改进也是有意义的。


不要忘记,从1月1日开始的DotNext门票价格会上涨。 个人-一千,标准-两千。 有关Early Bird的详细信息在网站上

Source: https://habr.com/ru/post/zh-CN433144/


All Articles