亚马逊AWS官方博客

宣布推出适用于 .NET 的移植助手

.NET Core 是 .NET 的未来! .NET Framework 的版本 4.8 是最后一个要发布的主要版本,Microsoft 表示,未来它将仅接收与错误、可靠性和安全性相关的修复。对于希望继续利用 .NET 平台上的未来投资和创新的应用程序,您需要考虑将应用程序移植到 .NET Core。此外,将应用程序移植到 .NET Core 时还需要考虑其他原因,例如受益于 Linux 和开源的创新、改进的应用程序扩展和性能以及减少许可费用。但是,移植可能需要大量的手动工作,其中一些没有差别,例如更新对项目依赖项的引用。

移植 .NET Framework 应用程序时,开发人员需要搜索兼容的 NuGet 程序包,并在应用程序的项目文件中更新这些程序包引用,而这些文件也需要更新为 .NET Core 项目文件格式。此外,由于 .NET Core 包含 .NET Framework 中可用的 API 子集,因此他们需要发现替代的 API。随着移植的进行,开发人员必须仔细检查编译错误和警告的长列表,以确定继续执行任务的最佳位置或优先级最高的位置。毋庸置疑,这极具挑战性,并且增加的摩擦会让拥有大型应用程序组合的客户望而却步。

今天,我们宣布推出适用于 .NET 的移植助手是一款新工具,可帮助客户分析 .NET Framework 应用程序并将其移植到在 Linux 上运行的 .NET Core。适用于 .NET 的移植助手可评估应用程序源代码以及公共 API 和 NuGet 程序包依赖项的完整树,以识别与 .NET Core 不兼容的程序,并指导开发人员在程序可用时进行兼容替换。API 和程序包替换的建议引擎设计为随着助手详细了解缺少包和 API 的使用模式和频率而进行改进。

适用于 .NET 的移植助手与其他工具的不同之处在于,它能够评估程序包依赖项的完整树,而不仅仅是不兼容的 API。它还以解决方案文件为起点,这让评估包含大量项目的整体解决方案变得更加容易,而不必分析和汇总各个二进制文件上的信息。这些功能和其他功能使开发人员可以快速开始移植过程。

分析和移植应用程序
使用适用于 .NET 的移植助手开始移植应用程序很简单,只需满足几个先决条件即可。首先,我需要安装 .NET Core 3.1 SDK。其次,我需要一个凭证配置文件(尽管未使用或不需要 CLI,但与 AWS 命令行界面 (CLI) 兼容)。凭证配置文件用于收集有关应用程序中使用的公共 API 和程序包(来自 NuGet 和核心 Microsoft 程序包)及其引用的公共 NuGet 程序包的兼容性信息。满足这些先决条件后,我将下载并运行该助手的安装程序。

安装助手后,我将签出应用程序源代码,并从“开始”菜单启动适用于 .NET 的移植助手。如果以前评估过某些解决方案,则可以从已评估的解决方案屏幕查看和打开它们,这让我能够从上次离开的位置继续执行操作。或者,在这里我也可以从主页中选择开始使用,以开始评估应用程序的解决方案文件。

系统要求我选择要使用的凭证配置文件,在这里我还可以选择共享我的遥测数据。随着时间的推移,共享此数据有助于进一步提高面向所有用户提供的建议的准确性,并且有助于发现问题,因此我们希望您考虑加入。

单击下一步,浏览以选择所需的解决方案文件,然后单击评估以开始执行分析。对于本博文,我将使用开源 NopCommerce 项目。

完成分析后,我将向您展示总体结果 – 应用程序所依赖的不兼容程序包的数量、所使用的不兼容 API 以及总体可移植性得分。该分数是基于所使用的不兼容 API 数量,对将应用程序移植到 .NET Core 所需工作量的预估。如果要移植多个应用程序,则可以使用它来识别并确定要首先移植的应用程序的优先级。

让我们深入评估概述以了解所发现的内容。单击解决方案名称将会进入一个更详细的控制面板,我可以在解决方案文件中查看组成应用程序的项目、不兼容的程序包和 API 依赖项的数量,以及每个特定项目的可移植性得分。如果已开始移植应用程序并且重新打开过评估,则还会列出每个项目的当前移植状态。

请注意,如果未在“项目”选项卡中选择任何项目,则项目引用NuGet 程序包API源文件选项卡中显示的数据为解决方案范围内的数据,但如果需要,可以先选择一个项目来确定数据的范围。

项目引用选项卡显示程序包依赖项的图形视图,并且我可以查看使用大多数依赖项的位置,在本例中为 Npp.CoreNpp.ServicesNpp.Web.Framework 项目。此视图可以帮助我确定首先从何处开始,以便在开始时获得最大的“好处”。我还可以选择项目以更清楚地查看特定的依赖项。

NuGet 程序包选项卡显示兼容和不兼容的依赖项,以及建议的替代项(如果可用)。API 选项卡列出不兼容的 API、它们所在的程序包以及被引用的次数。源文件列出构成应用程序项目的所有源文件,并指出可在每个文件中找到多少次不兼容的 API 调用。选择源文件将会打开一个视图,其中显示使用不兼容 API 的位置以及为解决问题而建议升级到的程序包版本(如果存在)。如果没有提供更新到其他程序包版本的替换建议,那么我需要打开一个源代码编辑器并更新代码以使用其他 API 或方法。在这里,我要查看 Nop.Web 项目中存在的 DependencyRegistrar.cs 的报告,并使用 Autofac NuGet 程序包。

让我们从 Nop.Core 项目开始移植应用程序。首先,导航回项目选项卡,选择项目,然后单击移植项目。在移植过程中,该工具将帮助我更新对 NuGet 程序包的项目引用,并将项目文件本身更新为较新的 .NET Core 格式。我可以选择复制应用程序的解决方案文件、项目文件和源文件,也可以就地进行更改。在这里,我选择进行复制。

单击保存会将应用程序源代码复制到所选位置,并打开移植项目视图,我可以从中设置新的目标框架版本(在本例中为 netcoreapp3.1),以及需要升级的项目的 NuGet 依赖项列表。对于每个不兼容的程序包,适用于 .NET 的移植助手都会提供可能的版本升级列表;对于每个版本,则会显示将保持或变得更不兼容的不兼容 API 的数量。对于我在此处选择的程序包,没有任何差别,但是对于可能会增加不兼容 API 的数量(我需要在源代码中手动修复这些 API)的更高版本,此指示有助于决定是升级到程序包的最新版本还是保留旧版。

选择版本后,程序包旁边的已弃用的 API 调用字段将提醒我需要在代码编辑器中进行修复的内容。单击该值可汇总已弃用的调用。

对于每个程序包依赖项,我将继续执行此过程,并在准备好后单击移植以更新引用。通过使用 IDE,我可以进入源文件,并将适用于 .NET 的移植助手的源文件和已启用的 API 列表视图用作参考,以替换不兼容的 API 调用,并针对应用程序中的其他项目遵循类似的过程。

改进建议引擎
适用于 .NET 的移植助背后的建议引擎设计为随着客户选择共享其遥测数据来学习并提供改进的结果。GitHub 上提供了引擎背后的数据模型,这些数据模型是对数十万个具有数百万个版本的程序包进行分析的结果。我们希望您考虑通过贡献数据来帮助提高结果的准确性和完整性。用户指南提供了有关如何使用数据的更多详细信息。

适用于 .NET 的移植助手现已推出,并且可供免费使用。

– Steve