亚马逊AWS官方博客
正式发布 AWS Transform for .NET — 首个用于大规模现代化 .NET 应用程序的 agentic AI 服务
我以 .NET 开发人员的身份开启职业生涯,并见证了 .NET 在过去几十年的发展。和你们中的许多人一样,我也曾基于 .NET Framework 开发过多个仅能在 Windows 上运行的企业级应用程序。我至今还记得使用 .NET Framework 构建第一个企业级应用程序的情景。尽管它曾为我们提供了很好的服务,但技术格局已经发生了显著变化。如今,.NET 已有开源且跨平台的版本,可在 Linux 上运行,这些基于 .NET Framework 构建的遗留企业级应用程序亟需迁移和现代化改造。
迁移到 Linux 的优势显著:应用程序的运行成本可降低 40%(省去 Windows 许可费用),运行速度可提升 1.5-2 倍且性能得到提高,扩展性可提高 50%,以应对不断增长的工作负载。在帮助迁移多个应用程序后,我可以说这些努力绝对值得。
然而,将 .NET Framework 应用程序迁移到跨平台.NET 是一个耗时耗力且容易出错的过程。您需要执行多个步骤(例如分析代码库、检测不兼容问题、在迁移代码时实施修复),然后验证更改。对于企业而言,挑战更为复杂,因为它们的产品组合中可能有数百个 .NET Framework 应用程序。
在 re:Invent 2024 上,我们将此功能作为适用于 .NET 的 Amazon Q 开发者版转换功能预览,以帮助您大规模迁移 .NET 应用程序。该功能提供统一的 Web 界面用于大规模转换,并在集成式开发环境(IDE)中支持单个项目和解决方案的迁移。
现在,我们已经采纳了您的宝贵反馈和建议,并且很高兴地宣布适用于 .NET 的 AWS Transform 正式发布。我们还添加了新功能,以支持使用私有 NuGet 包的项目,将模型视图控制器(MVC)Razor 视图迁移到 ASP .NET Core Razor 视图,并执行迁移后的单元测试。
稍后我将详细介绍这些关键新功能,但首先让我们快速了解适用于 .NET 的 AWS Transform 的两种迁移体验。
.NET 应用程序大规模迁移体验
企业数字化转型通常由负责跨多个业务部门对数百个应用程序进行现代化改造的核心团队推动。不同团队负责不同的应用程序及其各自的代码存储库。成功需要这些团队与跨业务部门的应用程序所有者和开发人员之间的密切协调。为了大规模加速现代化,适用于 .NET 的 AWS Transform 提供了一个 Web 界面,使团队能够直接连接到源代码存储库,并高效地改造组织内的多个应用程序。 对于需要开发人员专门关注的特定应用程序,开发人员还可以在 Visual Studio IDE 中通过扩展使用相同的代理功能。
首先,我们来看看适用于 .NET 的 AWS Transform 的 Web 界面如何帮助大规模迁移数百个 .NET 应用程序。
适用于 .NET 的 AWS Transform 的 Web 体验
要开始体验 AWS Transform 的 Web 界面,我按照文档中概述的步骤进行注册,使用我的凭证登录,并为 .NET 现代化创建了一个作业。
适用于 .NET 的 AWS Transform 创建了一个工作计划,即代理为大规模评测、发现、分析和转换应用程序而执行的一系列步骤。然后,它等待我设置连接器来连接到我的源代码存储库。
连接器到位后,AWS Transform 开始在我的账户中发现存储库。它开展的评测侧重于三个关键领域:存储库依赖关系、所需的私有包和第三方库以及存储库中支持的项目类型。
它会根据此评测,生成一个推荐的转换计划。该计划根据存储库的最后修改日期、依赖关系、私有包要求和支持的项目类型对存储库进行排序。
适用于 .NET 的 AWS Transform 会请求特定输入,例如目标分支、目标 .NET 版本和要转换的存储库。
选择要转换的存储库时,我有两种选择:使用推荐计划,或通过手动选择存储库来自定义转换计划。手动选择时,我可以使用 UI,或者下载存储库映射并上传自定义列表。
适用于 .NET 的 AWS Transform 会自动迁移应用程序代码、构建迁移后的代码、执行单元测试,并将迁移后的代码提交到存储库中的新分支。它提供全面的转换摘要,包括修改的文件、测试结果以及对剩余工作的建议修复。
虽然 Web 界面有助于加速大规模迁移,但某些应用程序可能需要开发人员关注。对于这些情况,Visual Studio IDE 中提供了相同的代理功能。
适用于 .NET 的 AWS Transform 的 Visual Studio IDE 体验
现在,我们来看看适用于 .NET 的 AWS Transform 在 Visual Studio 中的工作方式。
首先,我安装了适用于 Visual Studio 的 AWS Toolkit 扩展的最新版本并设置了先决条件。
我打开一个 .NET Framework 解决方案后,在解决方案资源管理器中,可以看到针对单个项目的上下文菜单项使用 AWS Transform 迁移项目。
我提供所需的输入,例如目标 .NET 版本,并批准代理自动改造代码、执行单元测试、生成转换摘要以及验证 Linux 就绪性。
我可以在本地查看代理所做的代码更改,并继续更新代码库。
现在来探索适用于 .NET 的 AWS Transform 正式发布时新增的核心功能。
支持包含私有 NuGet 包依赖的项目
在预览阶段,仅支持包含公共 NuGet 包依赖的项目。正式发布后,我们现在支持包含私有 NuGet 包依赖的项目。这是预览期间最受期待的功能之一。
我真正喜欢的是 AWS Transform 检测跨仓库依赖的功能。如果它发现私有 NuGet 包的源代码,会自动对其进行改造。如果无法定位源代码,在 Web 界面中,我可以灵活地上传所需的 NuGet 包。
AWS Transform 会显示需要解决的缺失包依赖。有两种方法可以做到这一点:我可以使用提供的 PowerShell 脚本创建并上传包,或在本地构建应用程序后从解决方案目录的包文件夹中上传 NuGet 包。
在我上传缺失的 NuGet 包后,AWS Transform 就可以解析依赖关系。最好同时提供 .NET Framework 和跨平台 .NET 版本的 NuGet 包。如果没有跨平台版本,请至少需要提供 .NET Framework 版本,以便 AWS Transform 将其作为程序集引用添加并继续进行转换。
单元测试执行
在预览阶段,我们支持将单元测试从 .NET Framework 迁移到跨平台 .NET。正式发布后,我们新增了在转换完成后执行单元测试的功能。
转换完成并执行单元测试后,我可以在控制面板中查看结果,并在每个单独的测试项目级别查看测试状态。
转换可见性和摘要
转换完成后,我可以下载详细的 JSON 格式报告,其中列出了已转换的存储库、每个存储库的详细信息,以及针对每个项目在存储库中执行的转换操作的状态。我可以在项目级别查看自然语言转换摘要,以项目级粒度了解 AWS Transform 的输出。该摘要提供了更新以及代码库关键技术更改的概述。
其他新功能
让我们快速浏览一下我们在正式发布时添加的其他新功能:
- 支持 UI 层迁移 — 预览阶段只能使用 AWS Transform 迁移 MVC 应用程序的业务逻辑层,UI 层需要手动迁移。正式发布后,现在可以使用 AWS Transform 将 MVC Razor 视图迁移至 ASP.NET Core Razor 视图。
- 扩展连接器支持 — 预览阶段仅支持连接到 GitHub 仓库。现在正式发布后,您可以连接到 GitHub、GitLab 和 Bitbucket 存储库。
- 跨仓库依赖关系 — 选择一个仓库进行转换时,依赖的仓库会自动选中以进行转换。
- 下载评测报告 — 可以下载账户中已识别存储库及其引用的私有 NuGet 包的详细评测报告。
- 带深度链接的邮件通知 — 当作业状态变为“已完成”或“已停止”时,会收到电子邮件通知。这些通知包含指向已转型代码分支的深度链接,以便在 IDE 中进行审查和继续转换。
注意事项
其他需要了解的事项包括:
- 区域 — 适用于 .NET 的 AWS Transform 现已在欧洲地区(法兰克福)和美国东部(弗吉尼亚州北部)区域正式发布。
- 定价 — 目前,AWS Transform 不收取额外费用。使用 AWS Transform 输出在 AWS 账户中创建或继续使用的任何资源将按标准定价计费。有关限制和配额,请参阅文档。
- 支持的 .NET 版本 — 适用于 .NET 的 AWS Transform 支持转换使用 .NET Framework 3.5+、.NET Core 3.1 和 .NET 5 + 以及跨平台 .NET 版本 .NET 8 编写的应用程序。
- 支持的应用程序类型 — 适用于 .NET 的 AWS Transform 支持迁移以下类型的 C# 代码项目:控制台应用程序、类库、单元测试、WebAPI、Windows 通信基金会(WCF)服务、MVC 和单页应用程序(SPA)。
- 入门 —访问适用于 .NET 的 AWS Transform 用户指南开始使用。
- 网络研讨会 — 参加网络研讨会利用代理式 AI 加速 .NET 现代化,通过现场演示体验适用于 .NET 的 AWS Transform。
– Prasad
*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您了解行业前沿技术和发展海外业务选择推介该服务。