.NET Core 2.2正式发布,有你喜欢的特性吗?

jopen 3年前
   <p style="text-align: center;"><a href="/misc/goto?guid=4959001093373817493" title=".NET Core"><img alt=".NET Core 2.2正式发布,有你喜欢的特性吗?" src="https://simg.open-open.com/show/50033a0c960edbbba32cb123ea6031ba.png" /></a></p>    <p>微软发布了 .NET Core 2.2 版本,主要包含对运行时的诊断改进,对 ARM32 for Windows 和 Azure Active Directory for SQL Client 的支持。此版本最大的改进是在 ASP.NET Core 中。</p>    <p><a href="/misc/goto?guid=5047997658127099423">ASP.NET Core 2.2</a> 和 <a href="/misc/goto?guid=5047997658404085770">Entity Framework Core 2.2</a> 也已发布。</p>    <p>你可以在 Windows、macOS 和 Linux 上下载并开始使用 .NET Core 2.2:</p>    <ul>     <li> <p><a href="/misc/goto?guid=5047997658541276482">.NET Core 2.2 SDK(包括运行时)</a></p> </li>     <li> <p><a href="/misc/goto?guid=5047997658541276482">.NET Core 2.2 运行时</a></p> </li>    </ul>    <p><a href="/misc/goto?guid=5047997658713821160">Visual Studio 15.9</a>、Visual Studio for Mac 和 Visual Studio Code 已支持 .NET Core 2.2 。</p>    <p><strong>更新亮点:</strong></p>    <p><strong>分层编译(Tiered Compilation)</strong></p>    <p>分层编译是一种使运行时能够更自适应地使用实时(JIT)编译器,以在启动时获得更好的性能并最大化吞吐量的功能。该功能在 .NET Core 2.1 中是可选的,然后在 .NET Core 2.2 Preview 2 中默认启用。不过开发团队认为还没有准备好在正式的 .NET Core 2.2 版本中默认启用它,所以已将其切换回可选功能。</p>    <p>分层编译有望在 .NET Core 3.0 中默认启用。</p>    <p><strong>运行时事件(Runtime Events)</strong></p>    <p>我们通常需要监视运行时服务(如当前进程的 GC,JIT 和 ThreadPool ),以了解这些服务在运行应用程序时的行为方式。在 Windows 系统上,这通常使用 ETW 监视当前进程的 ETW 事件来完成。虽然这种方法仍然有效,但使用 ETW 并不总是很容易。在一些低权限环境中,或是在 Linux、macOS 上,都可能无法使用 ETW 。</p>    <p>从 .NET Core 2.2 开始,可以使用 EventListener 类来使用 CoreCLR 事件。这些事件描述了 GC,JIT,ThreadPool 和 interop 的行为。它们在 Windows 上作为 CoreCLR ETW 提供程序的一部分公开的相同事件。这允许应用使用这些事件或使用传输机制将它们发送到遥测聚合服务。</p>    <p>订阅事件示例代码:</p>    <pre>  <span style="color:#0000ff">internal</span> <span style="color:#0000ff">sealed</span> <span style="color:#0000ff">class</span><span style="color:#000000"> SimpleEventListener : EventListener    {        </span><span style="color:#008000">//</span><span style="color:#008000"> Called whenever an EventSource is created.</span>        <span style="color:#0000ff">protected</span> <span style="color:#0000ff">override</span> <span style="color:#0000ff">void</span><span style="color:#000000"> OnEventSourceCreated (EventSource eventSource)        {            </span><span style="color:#008000">//</span><span style="color:#008000"> Watch for the .NET runtime EventSource and enable all of its events.</span>            <span style="color:#0000ff">if</span> (eventSource.Name.Equals (<span style="color:#800000">"</span><span style="color:#800000">Microsoft-Windows-DotNETRuntime</span><span style="color:#800000">"</span><span style="color:#000000">))            {                    EnableEvents (eventSource, EventLevel.Verbose, (EventKeywords)(</span>-<span style="color:#800080">1</span><span style="color:#000000">));            }        }          </span><span style="color:#008000">//</span><span style="color:#008000"> Called whenever an event is written.</span>        <span style="color:#0000ff">protected</span> <span style="color:#0000ff">override</span> <span style="color:#0000ff">void</span><span style="color:#000000"> OnEventWritten (EventWrittenEventArgs eventData)        {            </span><span style="color:#008000">//</span><span style="color:#008000"> Write the contents of the event to the console.</span>            Console.WriteLine ($<span style="color:#800000">"</span><span style="color:#800000">ThreadID = {eventData.OSThreadId} ID = {eventData.EventId} Name = {eventData.EventName}</span><span style="color:#800000">"</span><span style="color:#000000">);            </span><span style="color:#0000ff">for</span> (<span style="color:#0000ff">int</span> i = ; i < eventData.Payload.Count; i++<span style="color:#000000">)            {                </span><span style="color:#0000ff">string</span> payloadString = eventData.Payload[i] != <span style="color:#0000ff">null</span> ? eventData.Payload[i].ToString () : <span style="color:#0000ff">string</span><span style="color:#000000">.Empty;                Console.WriteLine ($</span><span style="color:#800000">"</span><span style="color:#800000">\tName = \"{eventData.PayloadNames[i]}\" Value = \"{payloadString}\"</span><span style="color:#800000">"</span><span style="color:#000000">);            }            Console.WriteLine (</span><span style="color:#800000">"</span><span style="color:#800000">\n</span><span style="color:#800000">"</span><span style="color:#000000">);        }    }</span></pre>    <p><strong>SqlConnection 支持 AccessToken</strong></p>    <p>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 。</p>    <p>使用 Azure Active directory 验证 SQL Server 连接示例:</p>    <pre>  <span style="color:#808080">//</span><span style="color:#000000"> get access token using ADAL.NET  </span><span style="color:#ff00ff">var</span> authContext <span style="color:#808080">=</span><span style="color:#000000"> new AuthenticationContext (authority);  </span><span style="color:#ff00ff">var</span> authResult <span style="color:#808080">=</span><span style="color:#000000"> await authContext.AcquireTokenAsync (appUri, clientCredential);  </span><span style="color:#808080">//</span> setup connection <span style="color:#0000ff">to</span><span style="color:#000000"> SQL Server  </span><span style="color:#ff00ff">var</span> sqlConnection <span style="color:#808080">=</span><span style="color:#000000"> new SqlConnection (connectionString);  sqlConnection.AccessToken </span><span style="color:#808080">=</span><span style="color:#000000"> authResult.AccessToken;  await sqlConnection.OpenAsync ();</span></pre>    <p>此外,该版本还包含 Injecting code prior to Main,提供 Windows ARM32 支持等特性。</p>    <p>适用平台:</p>    <ul>     <li> <p>Windows Client: 7, 8.1, 10 (1607+)</p> </li>     <li> <p>Windows Server: 2008 R2 SP1+</p> </li>     <li> <p>macOS: 10.12+</p> </li>     <li> <p>RHEL: 6+</p> </li>     <li> <p>Fedora: 26+</p> </li>     <li> <p>Ubuntu: 16.04+</p> </li>     <li> <p>Debian: 9+</p> </li>     <li> <p>SLES: 12+</p> </li>     <li> <p>openSUSE: 42.3+</p> </li>     <li> <p>Alpine: 3.7+</p> </li>    </ul>    <p>适用芯片:</p>    <ul>     <li> <p>x64 on Windows, macOS, and Linux</p> </li>     <li> <p>x86 on Windows</p> </li>     <li> <p>ARM32 on Linux (Ubuntu 16.04+, Debian 9+)</p> </li>     <li> <p>ARM32 on Windows (1809+; available in January)</p> </li>    </ul>    <p>完整详细信息请查阅 <a href="/misc/goto?guid=5047997658855474804">.NET Core 2.2 发行说明</a>。</p>    <p>来自: 开源中国社区</p>