写点什么

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

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

关注

评论

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

有没有比企微更好用的企业即时通讯软件?

BeeWorks

即时通讯 IM 私有化部署

YashanDB数据库的备份和恢复流程及实战中的注意事项

数据库砖家

RAG 切片利器 LumberChunker 是如何智能地把文档切割成 LLM 爱吃的块

蛋先生DX

AI 文档 切片 LLM rag

拼多多商品详情API技术指南

Datafox(数据狐)

拼多多商品详情接口 拼多多API 拼多多数据采集

五个新手友好的全球社交媒体监控工具

沃观Wovision

全球化 沃观Wovision 舆情监测系统 海外舆情监测 社交媒体监控

YashanDB数据库的大规模数据处理能力分析

数据库砖家

新加坡科技周圆满落幕,2026年5月TechWeek启航上海

极客天地

AI英语教育软件开发公司

北京木奇移动技术有限公司

AI教育 软件外包公司 AI英语

YashanDB 或其他数据库的版本控制与代码管理

数据库砖家

品牌必备:提供危机预警的全球社交媒体监控服务

沃观Wovision

全球化 社交媒体 沃观Wovision 海外舆情监测 社交媒体监控

详解ROMA中复杂图表的渲染实现

京东科技开发者

DeepSeek-OCR:让 AI “一眼看懂” 的黑科技

程序员泥瓦匠

OCR

详解ROMA中复杂图表的渲染实现

京东科技开发者

双碳时代的能源管理新基建:MyEMS 开源生态如何赋能企业低碳转型

开源能源管理系统

开源 能源管理系统

YashanDB数据库的断点续传机制与技术细节解读

数据库砖家

YashanDB数据库的备份与恢复最佳做法

数据库砖家

集团前端部署新方案-技术篇(总体架构设计)

京东科技开发者

探索无限可能:生成式推荐的演进、前沿与挑战【AI业务应用方向】

京东科技开发者

集团前端部署新方案-技术篇(总体架构设计)

京东科技开发者

专攻全球市场的社交媒体监控平台推荐

沃观Wovision

全球化 舆情监测 沃观Wovision 社交媒体监控 海外社交媒体监控

企业im聊天软件支持什么功能,应该怎么选?

BeeWorks

即时通讯 IM 私有化部署

MyEMS:开启智能化能源管理新时代

开源能源管理系统

开源 能源管理系统

YashanDB版本控制与升级策略

数据库砖家

YashanDB数据库的动态扩展能力与应用实例

数据库砖家

C#/.NET/.NET Core技术前沿周刊 | 第 58 期(2025年10.13-10.19)

追逐时光者

C# .net

YashanDB数据库的安全性:构建可信赖的数据环境

数据库砖家

从被动响应到主动预测:构建智能全球社交监控系统的原理

沃观Wovision

沃观Wovision 舆情监测系统 海外舆情监测 社交媒体监控 海外社交媒体监控

缅怀 Kite:倒在 AI-Coding 成功的前夜

行云创新

CloudIDE AI编程 Kite

YashanDB数据库的版本控制与变更管理策略

数据库砖家

YashanDB数据库的多副本容错机制详解与应用

数据库砖家

YashanDB数据库的弹性扩展与容量规划策略

数据库砖家

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