.NET Core新部署模式

从 .NET Core 2.2 开始,可以部署依赖于框架的可执行文件,这是“.exe” 文件而不是“.dll” 文件。 与依赖框架的部署在功能上类似,依赖框架的可执行文件 (FDE) 仍然依赖于存在的 .NET Core 的共享系统级版本来运行。 应用程序只包含代码和任何第三方依赖项。 与依赖框架的部署不同,FDE 特定于平台。

这种新的部署模式在构建可执行文件(而不是库)方面具有独特优势,这意味着你可以直接运行应用程序,而无需首先调用 dotnet

核心

在运行时服务中处理事件

你可能经常希望监视应用程序的运行时服务(如 GC、JIT 和 ThreadPool)的使用情况,以了解它们如何影响应用程序。 在 Windows 系统上,这通常通过监视当前进程的 ETW 事件来完成。 虽然这仍然可以很好地工作,但是如果你在低特权环境中或者在 Linux 或 macOS 上运行,那么并不总是能够使用 ETW。

从 .NET Core 2.2 开始,现在可以使用 System.Diagnostics.Tracing.EventListener 类来使用 CoreCLR 事件。 这些事件描述了诸如 GC、JIT、ThreadPool 和 interop 等运行时服务的行为。 这些事件与作为 CoreCLR ETW 提供程序的一部分公开的事件相同。 这允许应用程序使用这些事件或使用传输机制将它们发送到遥测聚合服务。 可以在以下代码示例中看到如何订阅事件:

C#复制

internalsealedclassSimpleEventListener : EventListener
{
    // Called whenever an EventSource is created.protectedoverridevoidOnEventSourceCreated(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.protectedoverridevoidOnEventWritten(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]?.ToString() ?? string.Empty;
            Console.WriteLine($"\tName = \"{eventData.PayloadNames[i]}\" Value = \"{payloadString}\"");
        }
        Console.WriteLine("\n");
    }
}

数据

使用 SqlConnection.AccessToken 属性对 Azure SQL 数据库进行 AAD 身份验证

从 .NET Core 2.2 开始,由 Azure Active Directory 颁发的访问令牌可用于对 Azure SQL 数据库进行身份验证。 若要支持访问令牌,必须将 AccessToken 属性添加到 SqlConnection 类。 若要利用 AAD 身份验证,请下载 System.Data.SqlClient NuGet 包的版本 4.6。 若要使用功能,可以使用包含在 Microsoft.IdentityModel.Clients.ActiveDirectory NuGet 包中的适用于 .NET 的 Active Directory 身份验证库获取访问令牌值。

JIT 编译器改进

分层编译仍然是一项可选功能

在 .NET Core 2.1,JIT 编译器实现了一项新的编译器技术,即“分层编译” ,作为可选功能。 分层编译旨在提高性能。 由 JIT 编译器执行的重要任务之一是优化代码执行。 然而,对于很少使用的代码路径,相比执行未优化代码所花费的运行时,编译器可能需要更多的时间来优化代码。 分层编译介绍了 JIT 编译中的两个阶段:

  • 第一层,将尽可能快地生成代码。

  • 第二层,将为那些频繁执行的方法生成优化代码。 为了增强性能,第二层编译并行执行。

运行时

在执行 Main 方法之前注入代码

从 .NET Core 2.2 开始,可以使用启动挂钩注入代码,然后再运行应用程序的 Main 方法。 启动挂钩使主机可以在部署应用程序之后自定义其行为,而不需要重新编译或更改应用程序。

我们希望托管提供商定义自定义配置和策略,包括可能会影响主入口点加载行为的设置,如 System.Runtime.Loader.AssemblyLoadContext 行为。 挂钩可用于设置跟踪或遥测注入,以设置回调进行处理,或定义其他环境相关的行为。 挂钩独立于入口点,因此不需要修改用户代码。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值