当前位置:首页 > 话题广场 > 攻略专题 > 游戏问答

.net项目如何打包发布?终于找到答案了.NET 大牛之路 | 005 .NET 的执行模型

本文来自『.NET大牛之路』体系专栏的分享,追更完整专栏请私撩我…… 前面我们介绍 .NET 历史时讲过,微软基于 .NET Framework 重新设计并创造了跨平台的 .NET Core,目前已经发展到 .NET 5 版本,它的性能较之前的 .NET Framework 有巨大的提升。 达到当天最大量API KEY 超过次数限制而 .NET Framework 产品线也被宣告终止(微软仍会继续维护,只是不会再发布新版本),它的最后个版本 .NET Framework 4.8 成为了绝唱。

.NET Framework 终将成为历史,我们要把思想从 .NET Framework 跳到 .NET Core/.NET 5+,首先要弄明白它们的执行模型和底层架构发生了什么变化。

注:为了简单起见,下文所说的 .NET Core 包含 .NET Core 和 .NET 5+。

我们先从一个高的角度来理解一下 .NET Core 执行模型的全貌,后面章节再从低的角度逐个拆开讲解各个模块。

.NET Core 的执行模型有两种,一种是基于 CoreCLR 运行时,这种和 .NET Framework 的执行模型几乎一样;另一种是基于 Native AOT 本地运行时,这是 .NET Core 新增的一种执行模型。

基于 CoreCLR

CoreCLR 和原来 .NET Framework 的 CLR(Common Language Runtime,公共语言运行时)几乎是一样的,只是 CoreCLR 去除了特定于 Windows 操作系统的部分,实现了跨平台。所以除了 CLR 运行时有些不同之外,它们的执行模型是一样的。

注意,平时我们会把 CoreCLR 习惯性地简称为 CLR,在 .NET Core 语境中,CLR 指的就是 CoreCLR。

基于 CoreCLR 的执行模型用简单流程图表示如下:

源代码经过编译器编译,生成程序集,运行的时候,再由 CLR 针对不同的操作系统和 CUP 架构(如 x86、x64 或 ARM)把程序集编译成本地代码(Native Code),本地代码可由操作系统直接运行。

注:在 .NET 中,本地代码就是机器码(Machine Code),只是叫法不同。它是处理器能够理解并直接执行的字节码指令。所有其他代码必须翻译或转换为机器码才能在计算机上运行。

基于 Native AOT

.NET Core 基于 CoreCLR 提炼出了一个精简版的本地运行时,移除了 JIT 编译器,保留了垃圾回收器、内存管理等模块。这个本地运行时之前的代号叫 CoreRT ,现在叫 Native AOT 。

Native AOT 运行时提供了一套 AOT(Ahead Of Time) 提前编译机制,它使用的是新一代的 RyuJIT 编译器,可以将 .NET Core 程序编译成本地代码(机器码),可在宿主机器直接运行,不需要提前安装 .NET Core 运行时。

基于 Native AOT 运行时的执行模型用简单流程图表示如下:

源代码经过编译器编译,直接生成本地代码,发布时将本地代码和本地运行时一起打包为单个可执行文件,可直接在操作系统上运行。

要使用本地运行时,在 VS 中发布时请选择 Self-Contained 模式,同时需指定目标平台及 CPU 架构(如win-x64、linux-x65等)。由于打包的文件包含本地运行时,所以它要比基于 CoreCLR 发布的文件要大几十兆。

使用 Native AOT 本地运行时有两大好处:一是发布时只有一个文件,已经包含本地运行时,不需要提前安装运行时环境,可直接在宿主机上运行;二是启动时本身就是机器吗,不要经过 JIT 编译器编译,启动效率更高。

小结

.NET Core 基于 CoreCLR 的执行模型和原来 .NET Framework 的执行模型是一样的,没有发生大的变化。另外,.NET Core 新增了一种基于 Native AOT 本地运行时的执行模型,它使用了 AOT 编译机制,可直接把 .NET Core 程序编译成机器码。

希望大家根据文中的流程图理解 .NET Core 两个执行模型的全貌,并牢记。这有助于我们理解 .NET 程序的运行原理,也是面试的高频话题。关于执行模型中的主要核心模块(编译器、程序集和运行时),后面的章节再单独详细讲解。

1.《.net项目如何打包发布?终于找到答案了.NET 大牛之路 | 005 .NET 的执行模型》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《.net项目如何打包发布?终于找到答案了.NET 大牛之路 | 005 .NET 的执行模型》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/gl/2148902.html

上一篇

关于110如何提升装等,你需要知道这些机电安装别自己琢磨,就按110页中建工艺标准来,一图一答一详解

下一篇

0x800b010a什么意思?终于找到答案了win10更新失败0x800f0904电脑蓝屏怎么解决

.net项目如何打包发布?总结很全面速看!NET Core:搭建私有Nuget服务器以及打包发布Nuget包

.net项目如何打包发布?总结很全面速看!NET Core:搭建私有Nuget服务器以及打包发布Nuget包

.net项目如何打包发布相关介绍,1.使用docker构建专用Nuget服务器 docker run-d-p 8085336080-v/home/NUGET/db :/var/www/d B- v/home/NUGET/packet ...

.net项目如何打包发布?终于找到答案了从一张图开始,谈一谈.NET Core和前后端技术的演进之路

.net项目如何打包发布?终于找到答案了从一张图开始,谈一谈.NET Core和前后端技术的演进之路

.net项目如何打包发布相关介绍,邹溪源,李文强,来自长沙.NET技术社区 一张图 2019年3月10日,在长沙.NET 技术社区组织的技术沙龙《.NET Core和前后端分离那些事儿》上,我们曾经试图通过一系列抽丝剥茧的过程来引导大...

.net项目如何打包发布看这里!.NET 大牛之路 | 005 .NET 的执行模型

.net项目如何打包发布看这里!.NET 大牛之路 | 005 .NET 的执行模型

.net项目如何打包发布相关介绍,本文来自『.NET大牛之路』体系专栏的分享,追更完整专栏请私撩我…… 前面我们介绍 .NET 历史时讲过,微软基于 .NET Framework 重新设计并创造了跨平台的 .NET Core,目前已经...

.net项目如何打包发布?总结很全面速看!.NET 大牛之路 | 005 .NET 的执行模型

.net项目如何打包发布?总结很全面速看!.NET 大牛之路 | 005 .NET 的执行模型

.net项目如何打包发布相关介绍,本文来自『.NET大牛之路』体系专栏的分享,追更完整专栏请私撩我…… 前面我们介绍 .NET 历史时讲过,微软基于 .NET Framework 重新设计并创造了跨平台的 .NET Core,目前已经...

关于.net项目如何打包发布,你需要知道这些.NET 大牛之路 | 005 .NET 的执行模型

关于.net项目如何打包发布,你需要知道这些.NET 大牛之路 | 005 .NET 的执行模型

.net项目如何打包发布相关介绍,本文来自『.NET大牛之路』体系专栏的分享,追更完整专栏请私撩我…… 前面我们介绍 .NET 历史时讲过,微软基于 .NET Framework 重新设计并创造了跨平台的 .NET Core,目前已经...

.net项目如何打包发布?我来告诉你答案C#.Net企业开发.程序部署打包机制实践.程序安装包制作

.net项目如何打包发布?我来告诉你答案C#.Net企业开发.程序部署打包机制实践.程序安装包制作

.net项目如何打包发布相关介绍,到2012年,微软带着打包工具直接完成了Setup项目,但这比较low。 VS2012虽然没有集成打包工具,但它为我们提供了下载的端口,需要我们手动安装一个插件InstallShield。网上有很多第...

.net项目如何打包发布?终于找到答案了Net微服务实战之CI/CD

.net项目如何打包发布?终于找到答案了Net微服务实战之CI/CD

.net项目如何打包发布相关介绍,基础 软件工程的许多思想和概念来自建筑工程,人们喜欢把软件开发比作住宅建设。 那么如果说运维是软件的地基,那么框架就是承重墙。起房子就是先打地基,再建承重墙。地基打得越稳,房子才能起得更高。也等同于运...

.net项目如何打包发布?我来告诉你答案.NET Core 分发打包

.net项目如何打包发布?我来告诉你答案.NET Core 分发打包

.net项目如何打包发布相关介绍,(9500.163.com) 由于 .NET Core 现已可用于更多平台,因此了解如何为其打包、命名并进行版本控制将很有用。 达到当天最大量API KEY 超过次数限制 这样,无论用户选择在哪里运行...