2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

重新设定.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:002629
用户头像

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

关注

评论

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

这一次,飞书改变「飞书」

ToB行业头条

【语言】Java 日期 API 的使用技巧

恒生LIGHT云社区

Java 编程语言

CODING 项目协同 2.0 —— 让协作有条不紊

CODING DevOps

DevOps 研发管理 CODING 项目协同

太顶了!华为高工用一份423页的网络协议笔记把计算机网络讲清了

热爱java的分享家

Java 面试 程序人生 网络协议 经验分享

修复SecurityException: getDataNetworkTypeForSubscriber问题

Changing Lin

11月日更

盲盒开发

CSS布局(二)之多列布局

Augus

CSS 11月日更

Go语言学习查缺补漏ing Day4

Regan Yue

Go 语言 11月日更

百万关注的CSRF攻击是什么意思?

喀拉峻

黑客 网络安全 安全 信息安全

React性能优化

CRMEB

.Net6 miniAPI JWT鉴权授权的多种实现

面向对象的猫

netcore NET6

云账户是什么意思?有什么用?

行云管家

云计算 公有云 私有云 混合云 云资源

一文解析数据库的三生三世

Zilliz

数据库 oracle 数据库设计 Milvus

主客体命名法

少个分号

关于风险管理,如何将思维从项目升维到项目群?

光环PMO社群

项目管理 项目经验

人脸识别实战:使用Python OpenCV 和深度学习进行人脸识别

AI浩

人脸识别

阿里P8手敲出来这份565页凤凰架构分布式手册,惨遭GitHub直接封杀

热爱java的分享家

Java 面试 编程语言 经验分享 凤凰架构

架构师书籍推荐:2021年必看的架构师图书

华章IT

架构师

springboot连接Nexus私服

小鲍侃java

11月日更

赋能“数字金融”,CODING 再下数城

CODING DevOps

研发管理 数字化转型 CI/CD 代码管理 可视化软件

前端如何低门槛开发iOS、Android、小程序多端应用

YonBuilder低代码开发平台

Shopee 末端物流智能提效之路

Shopee技术团队

人工智能 算法 后端 供应链 物流

渗透实战:内网域渗透

网络安全学海

网络安全 信息安全 渗透测试 WEB安全 安全漏洞

使用命令模式重构播放器控制条

Tom弹架构

Java 架构 设计模式

模块四课后作业 - 设计千万级学生管理系统的考试试卷存储方案

渐行渐远

架构实战营

热爱代码且发量惊人,一名反“内卷”研发工程师的日常

尔达Erda

程序员 开发者 技术人生 成长笔记

等级保护对象是指什么?是指整个单位吗?

行云管家

云计算 网络安全 等保 等级保护 等保2.0

ICCV 2021口罩人物身份鉴别全球挑战赛冠军方案分享

阿里云CloudImagine

阿里云 计算机视觉 视频云 ICCV2021 ICCV

TDengine助力顺丰科技大数据监控改造

TDengine

tdengine 时序数据库

ArkUI 3.0让多设备开发更简单|HDC2021技术分论坛

HarmonyOS开发者

HarmonyOS

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