近日,**亚马逊云科技推出 [Amazon Q](https://aws.amazon.com/cn/q/?trk=cndc-detail) Developer 迁移功能(预览版),旨在帮助开发者在集成开发环境(IDE)中将 .NET Framework 应用程序迁移至跨平台的 .NET。**
这一功能基于生成式 AI 能力,能够实现自动分析代码库,生成迁移计划,并执行升级和替换 NuGet 包和 API、重写已弃用或低效的代码组件,以及迁移至跨平台 .NET 等任务。
通过使用 [Amazon Q](https://aws.amazon.com/cn/q/?trk=cndc-detail) Developer 迁移功能,开发者可以**加速从 Windows 到 Linux 的迁移过程,降低许可费用支出,并享受 .NET 平台的最新创新成果。**
### **将 .NET Framework 应用程序迁移至跨平台.NET**
安装带有 [Amazon Q](https://aws.amazon.com/cn/q/?trk=cndc-detail) 的最新版 Amazon Toolkit,并使用组织提供的 Amazon IAM Identity Center 凭据登录。
![image.png](https://dev-media.amazoncloud.cn/404da52e918e4385afe05bdb9479fda2_image.png "image.png")
打开一个需要迁移到最新长期支持(LTS)版本的跨平台 .NET(当前为 .NET 8)的 .NET Framework 解决方案。
选择其中一个项目的上下文菜单,然后选择“使用 [Amazon Q](https://aws.amazon.com/cn/q/?trk=cndc-detail) Developer 迁移项目”。
![image.png](https://dev-media.amazoncloud.cn/2ceae9e2b817483da00ec95649524695_image.png "image.png")
接下来打开一个对话框,选择要转换的其他项目,并选择目标 .NET 版本。本文选择 .NET 8,然后点击“确认”继续转换。
![image.png](https://dev-media.amazoncloud.cn/a5cb3663b7564f14ac4e876b0ff08555_image.png "image.png")
可在代码转换计划窗口中查看状态,并在 [Amazon Q](https://aws.amazon.com/cn/q/?trk=cndc-detail) Developer 代码转换中心窗口查看进度。
虽然只选择了一个项目进行转换,但 [Amazon Q](https://aws.amazon.com/cn/q/?trk=cndc-detail) Developer 也会转换所有从属项目。选定的项目及其从属项目将组合成一个可分解的可构建单元,这是为了确保转换后的代码库能够成功构建。
![image.png](https://dev-media.amazoncloud.cn/a3e7f52a98a044d28fbf74d16d802d4b_image.png "image.png")
[Amazon Q](https://aws.amazon.com/cn/q/?trk=cndc-detail) Developer 首先会在本地构建项目,然后将所选项目和从属项目复制到亚马逊云科技中一个安全且临时的沙盒环境中进行处理,您可以在此环境中使用客户管理的密钥对代码进行加密。
[Amazon Q](https://aws.amazon.com/cn/q/?trk=cndc-detail) Developer 会分析代码库并生成转换计划,然后它将启动转换工作流,并针对转换计划中的每个项目迭代执行该计划。对于每个项目,它都会升级 NuGet 包和 API、更新启动或运行时配置、重写已弃用的代码并调试错误。
![image.png](https://dev-media.amazoncloud.cn/687511b1b1614b9e9b3f3cab0520de60_image.png "image.png")
转换完成后,选择 [Amazon Q](https://aws.amazon.com/cn/q/?trk=cndc-detail) Developer 的“转换摘要”查看总结。可以看到转换状态为成功。每个项目都显示了已更改的文件、已更新的软件包、已更改的 API 和 Linux 迁移状态。在 Linux 迁移状态一栏,可以看到项目是否已自动迁移,还是需要输入信息来解决尚待解决的问题。
![image.png](https://dev-media.amazoncloud.cn/bfe1301439234c3895c94b855fe81c94_image.png "image.png")
可以下载 Linux 准备就绪报告,查看需要手动解决的问题。
![image.png](https://dev-media.amazoncloud.cn/531e54136a29422ebabaeedd68023c01_image.png "image.png")
所有代码更改都是在沙盒环境中完成的,可以在将更新应用到本地工作存储库之前审查这些更改。为了手动审查 [Amazon Q](https://aws.amazon.com/cn/q/?trk=cndc-detail) Developer 所做的更改,选择查看差异视图(View Diff view),然后在 [Amazon Q](https://aws.amazon.com/cn/q/?trk=cndc-detail) Developer 转换中心(Transformation Hub)窗口中选择显示其中一个文件的更改。
![image.png](https://dev-media.amazoncloud.cn/c728595c774048b6b224464a0869d5b7_image.png "image.png")
审查更改后,在 [Amazon Q](https://aws.amazon.com/cn/q/?trk=cndc-detail) Developer 的“转换摘要”窗口中选择“接受建议的更改”,并将更改应用到本地工作存储库中。
![image.png](https://dev-media.amazoncloud.cn/b592a8ac60ad4da99e0116c6dd3fb5ba_image.png "image.png")
现在,可以继续在本地工作存储库中修复 Linux 准备就绪报告中的未解决问题,然后使用相同的步骤迭代转换其余项目。
### **须知事项**
* **可用性**:[Amazon Q](https://aws.amazon.com/cn/q/?trk=cndc-detail) Developer 的 .NET 迁移功能现已以预览形式推出,需订阅 [Amazon Q](https://aws.amazon.com/cn/q/?trk=cndc-detail) Developer Pro Tier 方可使用。
* **支持的 .NET 版本**:[Amazon Q](https://aws.amazon.com/cn/q/?trk=cndc-detail) Developer 的 .NET 迁移功能支持 .NET Framework 3.5 及以上版本、.NET Core 3.1 和 .NET 5 及以上版本编写的应用程序转换为跨平台的 .NET版本(.NET 8)。
* **支持的应用程序类型**:[Amazon Q](https://aws.amazon.com/cn/q/?trk=cndc-detail) Developer 的 .NET 迁移功能支持迁移以下类型的 C# 代码项目:控制台应用程序、类库、单元测试、Web API、Windows Communication Foundation(WCF)服务,以及基于模型视图控制器(MVC)和单页应用程序(SPA)的业务逻辑层。但用户界面层(如 Razor Views 和 WebForms)不在迁移范围内。此外,仅支持依赖于 Microsoft 授权的 NuGet 软件包的项目。对于依赖 Internet Information Server(IIS)的 .NET Framework 应用程序,只支持将默认 IIS 配置迁移到跨平台 .NET。
开始使用前,请先安装 Amazon Toolkit for Visual Studio,并按照下方链接的文档中的说明来迁移和升级您的 .NET 应用程序。
> **Amazon Toolkit for Visual Studio:**
>
> https\://aws.amazon.com/cn/visualstudio/?trk=cndc-detail
>
> **迁移和升级 .NET 应用程序的说明文档:**
>
> https\://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/transform.html?trk=cndc-detail
> *前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您发展海外业务和/或了解行业前沿技术选择推荐该服务。
![image.png](https://dev-media.amazoncloud.cn/85f137bfc7d248468658652fef1a5578_image.png "image.png")
![image.png](https://dev-media.amazoncloud.cn/bade914c90004b02af546a2ad5e37470_image.png "image.png")