写点什么

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

  • 2016-02-15
  • 本文字数:1473 字

    阅读完需:约 5 分钟

自从.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

2016-02-15 18:002276
用户头像

发布了 428 篇内容, 共 182.3 次阅读, 收获喜欢 39 次。

关注

评论

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

半导体存储品牌企业江波龙加入龙蜥社区,完成与 Anolis OS 适配

OpenAnolis小助手

龙蜥社区 龙蜥社区生态伙伴 江波龙

桌面云服务器是什么?有哪些操作系统

青椒云云电脑

桌面云 桌面云服务器

DMG Canvas for mac(DMG镜像制作工具) v4.0.9版

Mac相关知识分享

Mac 软件 #Mac

小白入门必备!计算机科学教程的Python精要参考PDF开放下载!

我再BUG界嘎嘎乱杀

Python 后端 入门 零基础

QAnything 1.4.1 中的文档解析

有道技术团队

rag 知识库问答

安全厂商第一站!OASA 走进绿盟科技圆满结束

OpenAnolis小助手

龙蜥社区 龙蜥社区安全联盟

高效管理笔记与多媒体内容的利器Notebooks for Mac v3.4.2版

Mac相关知识分享

Mac 软件 #Mac

# 使用RAG-GPT集成智谱AI、DeepSeek快速搭建OpenAI Cookbook智能客服

Geek_1ef48b

龙蜥开发者说:夏日编码奇遇,中国科学院大学学子的开源世界探索记 | 第 27 期

OpenAnolis小助手

龙蜥开发者说

兼职福音!API信息录入员火热招募中

幂简集成

API 兼职 招募

满帮集团 Eureka 和 ZooKeeper 的上云实践

阿里巴巴云原生

阿里云 微服务 云原生

今天!通义灵码在北京、成都、杭州三城开讲啦

阿里巴巴云原生

阿里云 云原生 通义灵码

XSKY CTO 在英特尔存储技术峰会的演讲:LLM 存储,架构至关重要

XSKY星辰天合

分布式存储 大语言模型 XSKY 星辰天合 高带宽存储

iShowU Instant for Mac(强大的屏幕录制与直播软件) v1.4.20(1491)版

Mac相关知识分享

Mac 软件 #Mac

NFTScan | 05.20~05.26 NFT 市场热点汇总

NFT Research

NFT NFTScan

Vue.js条件渲染与列表渲染指南 _

不在线第一只蜗牛

vue.js 前端

全方位质量保障!龙蜥在内核、软件包、容器镜像、三方模块的 CI 工程实践

OpenAnolis小助手

ci 质量保证 龙蜥社区

改造 Kubernetes 自定义调度器

快乐非自愿限量之名

Kubernetes 容器 云原生

云电脑对硬件配置有没有要求?

青椒云云电脑

云电脑 云电脑平台

使用 Spring Cloud Alibaba AI 构建 RAG 应用

阿里巴巴云原生

阿里云 云原生

精彩回顾!AI赋能下的自动化攻防分享

云起无垠

OpenHarmony开发者大会2024致谢项目群捐赠人,多家单位参与现场授牌

Geek_2d6073

今天!通义灵码在北京、成都、杭州三城开讲啦

阿里云云效

阿里云 云原生 通义灵码

虚拟货币开发:探索数字化金融的新前沿

dappweb

虚拟货币

Python 遍历字典的这6种方法,你都掌握了吗

我再BUG界嘎嘎乱杀

Python 后端 字典

报名倒计时!「飞天技术沙龙-CentOS 迁移替换专场」参会指南

OpenAnolis小助手

操作系统 CentOS 停服 CentOS 迁移最佳选择 CentOS迁移

第53期|GPTSecurity周报

云起无垠

#人工智能 LLM模型

重新设定.NET代码的目标平台_.NET_Jeff Martin_InfoQ精选文章