BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

重新设定.NET代码的目标平台

| 作者 Jeff Martin 关注 16 他的粉丝 ,译者 邵思华 关注 3 他的粉丝 发布于 2016年2月16日. 估计阅读时间: 5 分钟 | QCon上海2018 关注大数据平台技术选型、搭建、系统迁移和优化的经验。

自从.NET平台问世以来,随着多年的发展与流行度的不断增长,它已经逐渐扩展到了多个平台与设备上。如果开发者想要将他们的项目从一个平台移植到另一个平台上,他们经常会面对一个难题:如何确定他们的代码使用了哪些API,而目标平台又提供了哪些API。微软最近推出了.NET可移植性分析器(NPA —— .NET Portability Analyzer),能够使迁移的过程得到简化。

来自微软的Taylor Southwick与Connie Yao参加了由Seth Juarez所主持的一次Channel 9谈话,他们的话题包括NPA的功能,以及开发者如何在自己的项目中使用这一工具。NPA的设计目标是帮助开发者处理在由一个平台转换至另一个平台时所遇到的问题。该工具对于源平台与目标平台的选择没有限制,这就意味着开发者可以进行任意类型的迁移。(举例来说,开发者可以从Widows Phone迁移至Silverlight,或从Xamarin.Android迁移至.NET Core。)

NPA在执行时要指定源项目,它可以分析出项目中使用了哪些API,以及转换至新的目标平台时需要进行哪些改动。当前所支持的平台包括:

  • .NET Framework的每个桌面版本
  • Silverlight
  • Xamarin
  • Mono 3.3
  • Windows 8
  • Windows Phone
  • .NET Core

请注意,虽然开发者可以选择使用离线分析模式,但在默认情形下,所分析的代码信息将通过web服务发送给微软。整个分析过程将生成一个API列表,并发送给某个web服务(可移植性服务),该服务能够确定可用的目标,以及每种目标所具备的API。在分析过程结束之后将为用户生成一份报告,包含了“可移植性索引”信息,其中含有你所使用的API中有多少比例是在其他平台中不可用的细节信息。但该报告并不会告诉你这些API使用了多少次,只会告诉你是否使用过某个API(也就是说,无论某个API使用了1次或是100次,分析结果的评分都是一样的。)

在分析过程中使用web服务的原因有两个。微软希望通过一种简单的方式让分析功能保持更新,并且通过这种方式了解客户使用了哪些API。这些信息也将帮助微软决定有哪些API应该从桌面版本中移植到“次世代”的版本中,即.NET Core、ASP.NET等等。

如果有人对于这种方式存在隐私方面的顾虑,或者在他们的开发环境中无法访问互联网,那么NPA还提供了一种离线模式,可以通过重编译NPA以支持这一模式。微软已尽力减少通过web服务发送至服务器的信息,作为这一简化流程的一部分,NPA会尝试确定哪些代码是微软的API、哪些代码是客户自行编写的API,并仅发送微软的API数据。此外,还可以通过一个命令行选项查看发送给微软的信息。通常来说,以下信息将发送至微软服务器:

  • 所使用的API
  • 所引用的程序集
  • 你的代码所在的程序集的名称

该工具将提供三种不同的报告格式:

  • HTML报告 —— 对于你的代码库的可移植性给出一个总体概述
  • Excel电子表格 —— 可为API的使用提供过滤数据
  • JSON文件格式同样可用 —— 可将该文件与其他程序工具相结合,提供进一步的行为

作为微软开源计划的一部分,NPA的源代码托管在GitHub平台。除了命令行工具之外,还可以通过一个扩展在Visual Studio中使用NPA功能。可以在extension gallery中找到该扩展,在VS2013及VS2015中使用。

在Visual Studio中使用该工具除了能够生成报告之外,还有一个额外的好处。它能够以编辑器消息的方式指出你的代码中出现的可移植性问题,因此,每个有冲突的API调用都会指向你的代码中的实际位置。如果可能的话,它还能够建议你如何对代码进行修正。通过它还能跳转至特定的代码调用之处,这将为你节省大量的时间。(请注意,当前版本的Visual Studio扩展仅支持HTML格式的报告。)

查看英文原文:Retargeting .NET Code

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT