.NET Native-对于UWP开发者意味着什么

UWP uwpbox 866℃ 0评论

什么是 .NET Native

      .Net Native 是一种在VS2015中构建UWP App时使用的预编译技术。VS中包含的工具链会编译你的被托管的IL码成本地二进制码,任何被托管的(C#或VB) UWP App 将使用这种新的技术。应用程序在到达用户设备上之前都会被自动编译成本地代码。如果你想深入了解这种技术请参考MSDN.

.NET Native 怎样影响我们和我们的App

大多数情况下你的App将启动更快,执行更快,并且消耗更少的系统资源。

  • 冷启动时提升60%执行性能
  • 热启动时提升40%
  • 减少内存使用量
  • 不依赖在桌面系统中安装的.Net Runtime环境
  • 由于你的App是编译成本地的,所以你将获得本地代码的高性能优势(像C++一样)
  • 你仍然能使用高级的(C#或者VB)程序语言和工具
  • 你能继续使用.NET广泛的API 来写业务逻辑,内建内存管理和异常处理

你将获得两个世界,托管代码的感觉和c++的性能,是不是很酷?

Debug 与 Release 版本编译配置差异

.NET 本地编译时一个复杂的过程,并且相对于传统的.NET编译速度回更慢一点。上面的提到的好处来自于话费了更多的编译时间。你可以选择在任何时候编译你想运行的APP成本地代码,但这你将话费更多的时间等待编译完成。VS工具被设计来解决这个和创造更平稳的开发感受。

当你构建和运行“Debug”配置,你将运行 IL代码, .NET 系统组件将和你的应用代码一起打包,并且你的应用会携带一个CoreCLR附属包。这就意味着你将获得更好的开发体验——快速编译和开发、丰富的调试、诊断和其他你在.NET开发中使用的其他工具。

当你切换到“Release”模式,你的app将默认使用.NET Native工具链。一旦这个包被编译成本地二进制代码,这个包将不在需要包含.NET framework 库。此外,这个包会依赖最新的安装的.NET Native运行时而不是CoreCLR包。.NET Native运行时在社保上总是与你的应用程序包兼容。

通过“Release”配置编译本地代码将能在一个类似你用户的使用环境测试你的应用,在你的持续开发的过程中定期测试是非常重要的。

一个好的经验法则是在开发过程中定期测试你的应用,确保发现和改正来自.NET Native编译器的问题。在大多数情况下是没有问题的,然而,还是有些不能很好工作的东西。四维以上数组是一个列子。最终,你的用户将获得基于.NET Native编译的程序,因此在发布之前的开发过程中不断测试总是一个好的方法。

除了确保你基于.NET Native编译测试,你可能还发现AnyCPU构建选项已经消失,因为本地编译是依赖硬件架构的。这要一来,当你打包你的应用的时候你应该选择所有的三种架构配置(x86,x64,ARM)来确保你的应用能在任何可能的设备上运行。  默认情况下,VS将指导你完成这个操。像下图

图1- 默认选择三种架构

也就是说,你依然能建立“AnyCPU”的lib和DLLs给UWP引用,这些组件将被编译成在项目配置文件中配置的架构对应的二进制代码。

.NET Native 最后带来的改变是在工作流中需要花时间创建一个应用商店能接受的包。.NET Native 一个重要的特性是编译器能被放在云端。当你在VS中构建你的应用商店包的时候,两个包将会生成,一个是.appxupload 用来上传的一个是“Test”结尾的文件夹放的是本地安装测试的包。这个 .appxupload 包含了了MSIL二进制代码以及一个你的App所需的 .NET Native 工具包对应版本的引用。这个包在应用商店将会用对应的工具包进行重新编译。自从编译器放在云端起,将不需要本地重新编译就能迭代修复bug。

这对于开发者的工作有两个影响,第一个是做为一个开发者你不必手动去修订这个应用宝的版本号, 应用商店会存储这个版本号,当以任何原因在云端重新编译的时候会以叠加的方式修改这个版本号。 并且不用担心,你仍然有版本的前三个数的控制权,详细的版本号问题参考MSDN。第二个是你必须仔细考虑哪个包是要上传到应用商店。因为应用商店是在云端重新进行本地编译的,你不能上传在你自己电脑上编译好的本地的二进制代码。VS会引导你选择正确的包。

当你选择应用打包向导去创建你的应用包的时,当VS提示你创建一个上传到应用商店的包时,你要选择“YES”。我也推荐对于“Generate app bundle”选项选择“Always”,这样最终将只会生成一个用于上传的.appxupload文件。打包详细参考MSDN.

.NET Native对于开发工作的影响总结起来如下:

  • 在Release配置下进行有规律的测试
  • 确保版本号最后一个是0,虽然VS不允许你去修改他,你也一定不要想办法去改变他。
  • 仅仅只上传这个.appxuplaod文件到应用商店,如果你上传appx文件,应用商店将会报错。

使用.NET Native 的一些提示

如果你发现其他问题并且你猜测是由于.NET Native  引起的,这里有个用于调试这个问题的技术,Release 配置默认是优化代码的,它会丢失掉一些用于调试的信息。因此,尝试在Release配置下调试能获得一些问题。你也可以反着做,去创建一个定制的配置去启用.NET Native 工具链,同时不去优化代码。相关配置参考

原文:.NET Native – What it means for Universal Windows Platform (UWP) developers

转载请注明:UWPBOX » .NET Native-对于UWP开发者意味着什么

喜欢 (2)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址