写点什么

深入了解通用应用程序(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:383740

评论

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

专业的Mac菜单栏管理工具 Bartender 5

Rose

【每天学点‘音视频’】面试官:什么是音视频及实时音视频

小曾同学.com

音视频 H264 RTC 实时音视频

Apache Doris 2.1.10 版本正式发布

SelectDB

大数据 开源 实时数仓 Apaache Doris 数据湖分析

25年河北等保测评机构名称以及地址一览表

行云管家

等保 等保测评

StoreView SQL,让数据分析不受地域限制

阿里巴巴云原生

阿里云 云原生 sls

文件压缩与归档利器BetterZip for Mac v5.4中文版

Rose

Swinsian for Mac(音乐播放器)v3.0Preview23永久激活版

Rose

阿里云事件总线 EventBridge 正式商业化,构建智能化时代的企业级云上事件枢纽

阿里巴巴云原生

阿里云 云原生 EventBridge

YMatrix 的 HTAP 能力和其他数据库有何不同?

YMatrix 超融合数据库

HTAP 超融合数据库 HTAP 场景实践 YMatrix HTAP数据库

Fluss 实战:用 Partial Update 构建实时宽表的新范式

Apache Flink

大数据 flink Fluss

VMware NSX 4.2.2.1 发布,新增功能简介

sysin

nsx

上新功能!通义灵码行间建议预测 NES 使用方法

阿里云云效

阿里云 通义灵码

(Folx下载器)Folx Pro 5.28 Mac下载管理器

Rose

当企业遇上JNPF低代码,会擦出什么火花?

引迈信息

智慧文旅行业是否需要购买堡垒机?为什么?

行云管家

网络安全 数据安全 堡垒机 智慧文旅

南开大学赵宏教授解读AI语境下的教育根本问题,相关白皮书已发布

ModelWhale

AI教育 南开大学 人工智能教育 学科+AI白皮书

粒子枪仿真和Track Solver追踪求解_CST案例分析

思茂信息

cst cst操作 CST Studio Suite

多源多表写入、数据格式增强,SeaTunnel 2.3.11 重磅更新来了!

白鲸开源

大数据 开源 数据同步 Apache SeaTunnel 版本发布

Capture One Studo 16.6.1.21 专业的 RAW 格式转换器-Mac/win

Rose

上新功能!通义灵码行间建议预测 NES 使用方法

阿里巴巴云原生

阿里云 通义灵码

Topaz Video AI v7.0.1 一键激活版 AI视频无损缩放增强

Rose

会员付费漫画小程序:微擎开源生态下的内容变现新范式

微擎应用市场

智慧酒店多商户合伙人:微擎开源生态下的酒店行业资源整合平台

微擎应用市场

社区答疑明星招募令 | 成为SeaTunnel社群“技术担当”,我们等你来!

白鲸开源

开源社区 数据集成 Apache SeaTunnel 开源活动

为什么数字化转型失败率这么高?

积木链小链

数字化转型 数字化 智能制造

.NET 9中的异常处理性能提升分析:为什么过去慢,未来快

电子尖叫食人鱼

.NET 7

零风险操作!DolphinScheduler高可用架构下的无损扩缩容指南

白鲸开源

开源 运维 Apache DolphinScheduler 扩缩容 任务调度平台

ssh配置文件管理工具 SSH Config Editor Pro for Mac

Rose

一键视频图片解析下载工具SnapAny for Mac免费版

Rose

Muu 线下活动:微擎开源生态下的全流程活动管理与营销平台

微擎应用市场

壹佰门店社区团购:微擎开源生态下的社区零售增长引擎

微擎应用市场

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