.NET 可移植性分析器
重要
API 端口已弃用,支持使用 .NET 升级助手 工具进行二进制分析。 API 端口的后端服务已关闭,因此要使用该工具,必须以脱机方式使用。 有关详细信息,请参阅 .NET API 端口自述文件。
想让库支持多平台吗? 想要了解使 .NET Framework 应用程序在 .NET Core 上运行需要花费多大的精力? .NET 可移植性分析器是一种工具,可分析程序集并为应用程序或库提供有关缺失的 .NET API 的详细报告,以便在指定的目标 .NET 平台上实现可移植性。 可移植性分析器是一个控制台应用,可按指定文件或目录分析程序集。
将项目转换为面向 .NET Core 等新平台后,可以使用基于 Roslyn 的平台兼容性分析器来识别引发 PlatformNotSupportedException 异常以及其他兼容性问题的 API。
常用对象
- .NET:具有模块化设计,支持并行安装,并面向跨平台方案。 并行安装允许你采用新的 .NET 版本,而无需中断其他应用。 如果你的目标是将应用移植到 .NET 并支持多个平台,则这是建议的目标。
- .NET Standard:包括所有 .NET 实现上提供的 .NET Standard API。
- ASP.NET Core:基于 .NET 构建的新式 Web 框架。 如果你的目标是将 Web 应用移植到 .NET(Core)以支持多个平台,则这是建议的目标。
- .NET + 平台扩展:除了提供许多特定于 Windows 的 .NET Framework 技术的 Windows 兼容性包外,还包括 .NET API。
- .NET Standard + 平台扩展:除了 Windows 兼容性包之外,还包括 .NET Standard API,该包提供了许多特定于 Windows 的 .NET Framework 技术。
如何使用 .NET 可移植性分析器
若要开始使用 Visual Studio 中的 .NET 可移植性分析器,首先需要 克隆和生成 dotnet-apiport 项目。 它适用于 Visual Studio 2017 和 Visual Studio 2019 版本。
重要
Visual Studio 2022 不支持 .NET 可移植性分析器。
全局解决方案视图
分析包含多个项目的解决方案的一个有用步骤是可视化依赖项,以了解程序集的子集取决于哪些内容。 一般的建议是,从依赖项关系图中的叶节点开始,以自下而上的方式应用分析结果。
若要检索此内容,请运行以下命令:
ApiPort.exe analyze -r DGML -f [directory or file]
在 Visual Studio 中打开时,此结果如下所示:
分析可移植性
输入以下命令以分析当前目录:
ApiPort.exe analyze -f .
若要分析特定 .dll 文件列表,请输入以下命令:
ApiPort.exe analyze -f first.dll -f second.dll -f third.dll
若要以特定版本为目标,请使用 -t
形式参数:
ApiPort.exe analyze -t ".NET, Version=5.0" -f .
运行 ApiPort.exe -?
以获取更多帮助。
建议 包括 你拥有和想要移植的所有相关 .exe 和 .dll 文件,排除 应用依赖但你不拥有且无法移植的文件。 这将为你提供最相关的可移植性报表。
查看和解释可移植性结果
报表中仅显示目标平台不支持的 API。 .NET 可移植性报表以指定的格式保存为文件。 默认位于当前目录中的 Excel 文件 (.xlsx) 中。
可移植性摘要
报表的“可移植性摘要”部分显示运行中包含的每个程序集的可移植性百分比。 在上述示例中,svcutil
应用中使用的 71.24% 的 .NET Framework API 在 .NET Core + Platform Extensions 中可用。 如果针对多个程序集运行 .NET 可移植性分析器工具,则每个程序集在“可移植性摘要”报表中都应有一行。
详细信息
报表的“详细信息”部分列出了任意选定目标平台缺少的 API。
- 目标类型:该类型缺少目标平台中的 API。
- 目标成员:目标平台中缺少该方法。
- 程序集名称:缺少的 API 所在的 .NET Framework 程序集。
- 每个选定的目标平台都是一列,例如“.NET Core”:“不支持”值表示此目标平台不支持 API。
- 建议的更改:要进行更改的推荐 API 或技术。 对于许多 API,此字段当前为空或已过时。 由于 API 数量众多,因此保持最新状态是一项重大挑战。
缺少程序集
可能会在报告中发现“缺少程序集”部分。 此部分包含由你的经过分析的程序集引用的程序集列表(此列表未经过分析)。 如果它是你自己拥有的程序集,请将其包含在 API 可移植性分析器运行过程中,以便你可以获得详细的 API 级别可移植性报表。 如果它是第三方库,请检查是否存在支持目标平台的更新版本,并考虑转到较新的版本。 最终,此列表应该包含你的应用依赖的所有第三方程序集(其中具有支持目标平台的版本)。
另请参阅
有关 .NET 可移植性分析器的详细信息,请访问 GitHub 文档。