写点什么

深入了解通用应用程序(Universal Application)

  • 2015-06-05
  • 本文字数:1670 字

    阅读完需:约 5 分钟

通用应用程序(Universal Application)的基石之一是.NET Native。这是微软的“云端编译器”,它能够把 Windows 应用商店中的程序编译成所支持的每种设备的机器代码。

.NET Native 不使用 JIT 编译器,其结果是,用户可以在冷启动中节约最多达 60% 的时间,而在热启动中则最多达 40%。编译器将查看整个应用程序,从而可以去掉用不到的功能,这在一些应用程序中可以节约最多达 30% 的空间。

第二块基石是叫做“自适应应用程序(adaptive app)”的概念。这个概念是指当应用程序所运行的设备上的一些功能和 API 并不存在时,仍然能够正常运行。只要遵循正确的模式,原生编译器就会去掉对那些在用户设备上不存在的 API 的引用。

.NET Native 的另一个好处是,它允许微软以更快的节奏运转。应用程序静态链接到大部分框架库,这意味着你不太可能看到已发布应用程序的破坏性改动。开发人员必须明确选择可能破坏应用程序的新版本,这意味着微软不必过于担忧破坏性改动的问题。

最后,.NET Native 使得微软在框架库中发现安全漏洞或者需要支持新的 CPU 架构时,可以自动重新编译应用程序。后者不仅仅停留在理论上,微软透露他们计划在今年秋天支持第四代 CPU 架构。

调试的工作流程

默认情况下,Windows 10 应用程序在调试模式会编译成 IL,而在发布模式会编译成原生代码。这可以通过项目属性窗口中的编译器标志来改变。开发人员大部分时间应该使用调试模式,因为.NET Native 的构建时间明显要更长。

在设备上调试时,Visual Studio 需要推送一个额外的库 CoreCLR。这包括许多应用程序通常不需要的功能,所以当应用程序从 Windows 应用商店安装时不包括这个库。

版本 **** 号设置

在通用应用程序中,将不允许开发人员使用四位数字的版本号码。虽然开发人员还可以使用前三位数字,但是第四位数字保留由.NET Native 编译器使用。

任何 CPU

对通用应用程序,开发人员不能够指定任何 CPU(Any CPU)为目标架构。微软要求应用程序的开发人员确实已针对目标硬件测试了他们的应用程序。

AppX 打包选项

调试版本的程序包包含基于 MSIL 的库。调试模式的构建不适合设备上的旁加载(side-loading),因为设备上可能没有安装框架库的正确版本。

发布版本的程序包包含原生编译的库,带有发布所需的元数据。

运行时指令(rd.xml)

运行时指令(Runtime Directives)用于告诉编译器你要通过反射访问什么类型。如果你没有正确地列出类型,优化器可能会删除类型的元数据、甚至类型本身。

在运行时指令文件中指定过多信息的坏处是,你会无谓地增加应用程序的大小。如果这一点不成问题,那么你可以保留所有的默认设置。

.NET Native 的最佳实践

在调试模式开发你的应用程序,可以获得更快的构建和测试周期。

定期在发布模式进行测试,以确保不会引入涉及.NET Native 的错误。不要等到项目临结束时,才来解决原生的问题。

.NET Native 的工作计划

对于将来的计划,微软打算减少原生编译应用程序的构建时间。他们也想要找到分享框架程序包的办法,从而减小应用程序在硬盘上的大小。

事后调试

如果你的应用程序在你无法访问的设备上崩溃,你就要从开发者门户获取调试符号(debug symbols)。使用这些符号需要匹配的源代码,因此请确保你有一个匹配的分支。

Windows 10 通用应用程序与 Windows 8.1 将具有相同的外围应用(surface area)。“是的,WCF 将可以在 Windows Phone 上运行。”未来版本的通用应用程序将通过 NuGet 随时发布。

便携式类库如果以.NET 核心 4.5.1 为目标,则将照常工作。

行动呼吁

微软希望尽快知道在普通编译和.NET Native 编译的行为之间是否有任何不同。请把问题报告到 dotnetnative@microsoft.com。

欲知更多关于通用应用程序的信息,请观看 Channel 9 的视频,深入了解XAML 和.NET 通用Windows 应用程序的开发

查看英文原文: Deep Dive into Universal Applications


感谢邵思华对本文的审校。

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

2015-06-05 10:384038

评论

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

大模型时代,数据标注产业面临的挑战

数据堂

人工智能 AI 数据标注 大模型 标注员

The History of Big Data

数新网络官方账号

数据库 大数据

热烈祝贺 Flink 2.0 存算分离入选 VLDB 2025

Apache Flink

大数据 flink 流计算 VLDB

​​智能体开发革命:用LangChain打造下一代AI应用工作流

聚客AI学院

人工智能 向量数据库 langchain AI 智能体 rag实战

如何监控YashanDB数据库性能并实现自动预警?

数据库砖家

如何快速搭建基于YashanDB数据库的应用?

数据库砖家

修改域名解析记录,多久生效?

防火墙后吃泡面

让AI在企业真能用、真落地 飞书发布业界首个AI应用成熟度模型

ToB行业头条

AI 飞书

如何快速掌握YashanDB数据库高级查询技巧?

数据库砖家

MyEMS优势详解

开源能源管理系统

开源 能源管理 开源能源管理系统 MyEMS

开源之夏2025 | Karmada 社区中选学生名单公布!

华为云原生团队

云计算 容器 云原生

这几个 Vibe Coding 经验,真的建议学!

Immerse

告别能源浪费:ISO 50002 标准指导下的审计全流程与 MyEMS 智能管理方案

开源能源管理系统

开源 能源管理 开源能源管理系统

Flink Forward Asia 2025 主旨演讲精彩回顾

阿里云大数据AI技术

人工智能 云计算 flink 阿里云 数据库 大数据

AlphaGPT助力华商(柳州)所落地法律AI本地化,引领广西法律行业智能化新时代

科技汇

Web前端入门:JavaScript 鼠标事件(mouse) enter/leave 和 over/out 区别

电子尖叫食人鱼

JavaScript Web

如何管理YashanDB中的数据模型?

数据库砖家

Apache Cloudberry 向量化实践(二):如何识别和定位向量化系统的性能瓶颈?

酷克数据HashData

如何编写YashanDB的自定义函数以扩展功能

数据库砖家

翻译:2025年值得关注的数字化转型趋势

优秀

数字化转型 数字化管理

如何快速入门YashanDB数据库开发

数据库砖家

MyEMS 开源能源管理系统在生产中的核心作用与应用价值

开源能源管理系统

开源 能源管理 开源能源管理系统

通知!引迈低代码上线企业微信应用市场

引迈信息

如何结合YashanDB实现智能化数据管理与应用

数据库砖家

如何结合YashanDB数据库实现企业级智能分析平台

数据库砖家

如何评估YashanDB的查询性能

数据库砖家

Prompt-Driven编码与领域驱动建模的融合研究

申公豹

AI

如何策划YashanDB的培训与学习项目

数据库砖家

深入了解通用应用程序(Universal Application)_.NET_Jonathan Allen_InfoQ精选文章