最新发布《数智时代的AI人才粮仓模型解读白皮书(2024版)》,立即领取! 了解详情
写点什么

.NET Native:将.NET 应用编译为原生应用

  • 2015-09-01
  • 本文字数:1956 字

    阅读完需:约 6 分钟

什么是.NET Native?
.NET Native 是一套在Visual Studio 2015 中编译通用Windows(UWP)应用的预编译工具,它可以将托管的中间语言二进制文件编译为本地二进制文件,每一个托管的通用Windows 应用都将受益于这项新技术。在用户设备上安装之前,应用会自动编译为原生代码。有关其工作机制的详情可以查看 MSDN

.NET Native 会带来什么?
根据不同的情况,.NET Native 所带来的好处各种各样。不过在大多数情况下,.NET Native 将会使得应用启动更快、运行更好、占用用户系统资源更少。具体优点如下:

  • 冷启动效率提升 60%
  • 热启动效率提升 40%
  • 原生编译时应用占用内存资源更少
  • 系统无需安装桌面.NET Runtime
  • 由于应用在本地编译,性能可以借助原生代码的优势得到改善
  • 可利用业内领先的 C#或 VB 及其编程语言工具
  • 提供全面而一致的.NET 编程模型,包括编写业务模型所需的扩展 API、内置内存管理以及异常处理等

Debug 和 Release 两种编译模式的差异
.NET Native 的编译过程十分复杂,相比于传统的.NET 编译,编译时间稍微长一些。上面提到的那些优点牺牲了一部分编译时间。Visual Studio 在编译应用时会提醒开发者这一点,保证了良好的开发体验。

当使用 Debug 编译模式时,在应用中运行的是中间语言代码,.NET 系统部件不和应用代码一起封装,而且应用需要依赖 Microsoft.NET.CoreRuntime (CoreCLR)包。这就意味着,开发者可以享有最优的开发体验。编译和配置都十分迅速,有着丰富的调试和诊断信息,在.NET 开发中还可以使用所有熟悉的工具。

而对于 Release 模式,应用会默认使用.NET Native 工具链。由于程序包编译成了本地二进制文件,它就不用再包含.NET 框架库。另外,程序包依赖于最新安装的.NET Native Runtime 而不是 CoreCLR 包,设备上的.NET Native Runtime 始终与应用程序包兼容。

通过 Release 的本地原生编译可以在一个模拟用户使用的环境里对应用进行测试。在应用开发过程中,定期的测试十分重要,这样可以保证查找和修改.NET Native 编译器相关的错误。大多数情况下.NET Native 编译器会正常工作,但在少数情况下可能就不那么顺利了,比如 4 维以上的数组可能引发错误。用户最后获得的是.NET Native 编译的应用,所以最好在开发过程中测试应用的版本,确认无误而后再发布。

另外需要补充的是,.NET Native 取消了跨平台的编译模式。原生编译的架构独立,因此跨平台编译不再有用。一个附加的结果是,当开发者打包应用程序时,需要将三个体系结构配置(x86、x64、ARM)全部选中,以保证应用程序对所有的设备都能兼容。

.NET Native 改变了打发布包的方式,这是给工作流带来的最后一个重大变化。.NET Native 的一大特点是,编译器可以放置在云端。在 Visual Studio 中编译应用包时会创建两个包,一个是.appxupload 文件,另一个是侧面加载用的“测试”.appx 文件。.appxupload 包含了 MSIL 二进制文件和应用使用的.NET Native 工具链版本信息(也记录在了 AppxManifest.xml 文件中)。编译后的程序包接下来放入应用商店,然后被相同版本的.NET Native 工具链编译。因为编译器置于云端,开发者无需在本地重新编译应用程序,便能够反复多次修改程序缺陷。

这样的改变给开发者工作流又带来了另外两个改变。第一是开发者不能修改应用程序包的第四个版本号,这是因为应用商店需要通过修改版本号来标记在云端的每一次编译行为。不过开发者还能修改其他三个版本号,所以不必有太大的疑虑。第二是需要开发者特别注意上传到应用商店的程序包。应用商店代替开发者进行原生编译,所以开发者不能上传本地.NET Native 编译器生成的原生二进制文件。对此,Visual Studio 会帮助开发者选择正确的文件。

总结来说,.NET Native 带来的最主要的变化是以下几点:

  • 使用 Release 模式定期测试开发的应用程序
  • 确保修订包编号为 0(Visual Studio 不允许修改,也不要使用文本编辑器修改)
  • 只上传创建包时生成的.appxupload 文件至应用商店。如果上传通用 Windows 平台的.appx 文件,应用商店会拒绝并报错

使用.NET Native 的其他小技巧
如果开发者怀疑.NET Native 造成了某些错误,可以尝试用以下方法解决。因为 Release 模式默认优化了代码,这会丢失 Debug 模式下需要的一些生成文件,所以在 Release 模式中调试可能会出现错误。开发者可以新建一个自定义模式来使用.NET Native 工具链,同时不要优化代码。详细内容可以查看这里

从一开始就避免.NET Native 相关的错误无疑是更好的选择。 Microsoft.NET Native.Analyzer 在开发过程中如果遇到代码与.NET Native 冲突,会给出相应的警告。


感谢徐川对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群)。

2015-09-01 19:007201
用户头像

发布了 268 篇内容, 共 118.1 次阅读, 收获喜欢 24 次。

关注

评论

发布
暂无评论
发现更多内容

KeyShot 2023 Pro for mac(3D渲染和动画制作软件)v12.2.2.4激活版

iMac小白

一站式解决方案:带你体验在线生成用户画像的魅力

Geek_09ea8e

用户画像

基于AI的架构优化:创新数据集构造法提升Feature envy坏味道检测与重构准确率

华为云开发者联盟

人工智能 华为云 华为云开发者联盟 智能检测

掌握HarmonyOS框架的ArkTs如何管理和共享状态数据

不在线第一只蜗牛

数据库 HarmonyOS 鸿蒙系统

观测云产品更新 | 监控、数据脱敏、快照分享等优化

观测云

监控 快照 数据脱敏

哈啰一面:如何优化大表的查询速度?

王磊

Java 面试

基于xstate实现携程金服业务流程动态化

赫杰辉

软件测试/人工智能|Python关键字:代码掌中利器的关键之处

霍格沃兹测试开发学社

RazorSQL for Mac(多功能SQL数据库编辑器)支持M1 v10.5.0注册激活版

iMac小白

Final Cut Pro X for Mac(fcpx视频剪辑)简体中文版下载

iMac小白

Microsoft Remote Desktop Beta for Mac中文直装版下载

iMac小白

Ubuntu安装Anaconda详细步骤

百度搜索:蓝易云

Linux ubuntu 运维 Anaconda 云服务器

Debian12编译安装R软件教程。

百度搜索:蓝易云

云计算 Linux 运维 云服务器 Debian

手把手入门MO | 如何通过 Superset 实现 MatrixOne 的可视化监控

MatrixOrigin

分布式数据库 云原生数据库 MatrixOrigin MatrixOne HTAP数据库

软件测试/人工智能|Python函数与调用:解放编程力量的关键

霍格沃兹测试开发学社

小程序开发实战案例之如何获取用户信息(一)

盐焗代码虾

支付宝小程序 经验分享 小程序开发 用户信息

交互式白板软件有哪些?全球顶级的7款白板软件盘点!

彭宏豪95

在线白板 办公软件 团队协作工具 效率软件 数字白板

产品待办列表和冲刺待办列表的区别

PingCode

产品经理 产品待办列表

淘宝店铺所有商品数据接口|淘宝API接口

tbapi

淘宝API接口 淘宝店铺所有商品数据接口 淘宝整店商品数据接口

MatrixOne Meetup回顾 | 深圳站

MatrixOrigin

分布式数据库 云原生数据库 MatrixOrigin MatrixOne HTAP数据库

一文带你掌握C语言的分支结构

不在线第一只蜗牛

算法 编程语言 C语言

MatrixOne实战系列回顾 | MatrixOne 集群运维

MatrixOrigin

分布式数据库 云原生数据库 MatrixOrigin MatrixOne HTAP数据库

Compressor for Mac(视频转码编辑工具)v4.7中文激活版

iMac小白

音视频FAQ(二)视频直播延时高

ZEGO即构

Inklet for Mac(触控板绘画工具) v2.2.5永久激活版

mac

苹果mac Windows软件 Inklet 触控板绘画工具

macOS 14 Sonoma(最新MacOS系统) pkg完整安装包 14.1.2正式版

iMac小白

究竟什么是用户画像?不得不看的构建法宝!

Geek_09ea8e

用户画像

iMovie for Mac(专业视频剪辑工具)v10.4.0中文版

iMac小白

软件测试/人工智能|Python标识符:代码世界中的命名之道

霍格沃兹测试开发学社

单元测试|如何编写更安全、更可靠的代码?

秃头小帅oi

低代码 单元测试

Milvus 再上新!支持 Upsert、Kafka Connector、集成 Airbyte,助力高效数据流处理

Zilliz

kafka Milvus Zilliz airbyte

.NET Native:将.NET应用编译为原生应用_.NET_张天雷_InfoQ精选文章