

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用 Amazon Q 开发者版转换 .NET 应用程序
<a name="transform-dotnet-IDE"></a>

Amazon Q 开发者版可通过生成式人工智能驱动的重构工作流，将您基于 Windows 的 .NET 应用程序移植为兼容 Linux 的跨平台 .NET 应用程序。此外，Amazon Q 还能帮助您将跨平台 .NET 应用程序的旧版本升级到新版本。

要转换 .NET 解决方案或项目，Amazon Q 会先分析您的代码库，确定移植应用程序所需的更新内容，并在转换开始前生成一份转换计划。在分析过程中，Amazon Q 会将您的 .NET 解决方案或项目划分为多个代码组，您可在转换计划中查看这些代码组。*代码组*指一个项目及其所有依赖项的集合，它们共同构成一个可编译的代码单元，如动态链接库（DLL）或可执行文件。

在转换期间，Amazon Q 会在转型中心提供 step-by-step更新，您可以在其中监控进度。应用程序转换完成后，Amazon Q 会生成一份摘要，并在差异视图中展示建议的变更；您可先验证这些变更（可选操作），再确认接受。确认接受变更后，Amazon Q 会对您的 .NET 解决方案或项目进行就地更新。

Amazon Q 在将 .NET 应用程序移植到 Linux 时，会执行以下四项关键任务：
+ **升级语言版本**：将代码中过时的 C\$1 版本替换为兼容 Linux 的 C\$1 版本。
+ **从 .NET Framework 迁移到跨平台 .NET**：将依赖 Windows 的 .NET Framework 项目及包迁移到兼容 Linux 的跨平台 .NET。
+ **重写代码以实现 Linux 兼容性**：对已废弃、低效的代码组件进行重构和重写。
+ **生成 Linux 兼容性就绪报告**：对于需要用户干预才能让代码在 Linux 上编译和运行的开放式任务，Amazon Q 会生成一份详细报告，列出转换后配置应用程序所需执行的操作。

有关 Amazon Q 如何执行 .NET 转换的更多信息，请参阅[工作原理](how-dotnet-transformation-works.md)。

**Topics**
+ [配额](#quotas-dotnet-transformation)
+ [在 Visual Studio 中使用 Amazon Q 开发者版移植 .NET 应用程序](port-dotnet-application.md)
+ [Amazon Q 开发者版如何转换 .NET 应用程序](how-dotnet-transformation-works.md)
+ [在 IDE 中排查 .NET 转换问题](troubleshooting-dotnet-transformation-IDE.md)

## 配额
<a name="quotas-dotnet-transformation"></a>

在 IDE 中使用 Amazon Q 执行 .NET 转换时，需遵守以下配额限制：
+ **单任务代码行数**：Amazon Q 在单个转换作业中可处理的最大代码行数。同时也是 .NET 转换的月度总行数限制。
+ **并发任务数**：您可同时运行的最大转换作业数量。此配额适用于 IDE 中的所有转换操作（包括 [Java 转换](transform-java.md)）。


| 资源 | 配额 | 
| --- | --- | 
| 单任务代码行数 | 100000 行代码 | 
| 并发任务 |  每位用户 1 个任务 每个 AWS 账户 2 个职位  | 

# 在 Visual Studio 中使用 Amazon Q 开发者版移植 .NET 应用程序
<a name="port-dotnet-application"></a>

按照以下步骤，在 Visual Studio 中使用 Amazon Q 开发者版将基于 Windows 的 .NET 应用程序移植为兼容 Linux 的跨平台 .NET 应用程序。

## 步骤 1：先决条件
<a name="transform-dotnet-prerequisites"></a>

继续之前，请确保您已完成[在 IDE 中设置 Amazon Q](https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/q-in-IDE.html) 中的步骤。

在启动 .NET 转换作业前，请确保您的应用程序满足以下先决条件：
+ 您的应用程序仅包含使用 C\$1 编写的 .NET 项目。
+ 你的应用程序只有 Microsoft 编写的软件包依赖关系 NuGet 
+ 您的应用程序仅使用 UTF-8 字符。如果您的应用程序使用非 UTF-8 字符，Amazon Q 仍会尝试执行代码转换。
+ 如果您的应用程序依赖互联网信息服务（IIS），则仅使用默认的 IIS 配置。
+ Amazon Q 会评估您所选项目的类型及其依赖项，以创建代码组。您的代码组仅支持以下项目类型：
  + 控制台应用程序
  + 类库 
  + Web API
  + WCF 服务
  + 模型视图控制器（MVC）和单页应用程序（SPA）的业务逻辑层
  + 测试项目

**注意**  
Amazon Q 不支持转换界面层组件，例如Razor视图或 WebForms ASPX 文件。若 Amazon Q 在您的解决方案或项目中检测到 UI 层组件，会排除这些组件执行部分转换；之后您可能需要进一步重构代码，才能在目标 .NET 版本上完成编译。

## 步骤 2：转换应用程序
<a name="transform-dotnet-app"></a>

要转换您的 .NET 解决方案或项目，请完成以下步骤：

1. 在 Visual Studio 中打开您想要转换的、基于 C\$1 的解决方案或项目。

1. 在编辑器中打开任意一个 C\$1 代码文件。

1. 选择**解决方案资源管理器**。

1. 在“解决方案资源管理器”中，右键单击您想要转换的解决方案或项目，然后选择**使用 Amazon Q 开发者版移植**。

1. 将显示**使用 Amazon Q 开发者版移植**窗口。

   **选择要转换的解决方案或项目**下拉菜单中，会默认选中您此前选择的解决方案或项目；您可展开该菜单，选择其他需要转换的解决方案或项目。

   在**选择 .NET 目标版本**下拉菜单中，选择您要升级到的 .NET 版本。

1. 选择**确认**，开始转换。

1. Amazon Q 开始转换代码。您可查看其生成的转换计划，了解应用程序的具体转换方式。

   系统会打开**转换中心**，您可在整个转换过程中通过它监控进度。在 Amazon Q 完成**等待任务转换启动**步骤后，在剩余转换期间，您可离开当前项目或解决方案。

1. 转换完成后，返回**转换中心**，选择**查看差异**，在差异视图中查看 Amazon Q 建议的变更。

1. 选择**查看代码转换摘要**，了解 Amazon Q 所做变更的详细信息；您也可选择**将摘要下载为 .md 文件**，下载转换摘要。

   如果**代码组**表格中的任一项目在“Linux 移植状态”下需要手动输入，您必须手动更新部分文件，才能让应用程序在 Linux 上运行。

   1. 在**操作**下拉菜单中，选择**下载 Linux 就绪报告**。

   1. 系统会打开一个 .csv 文件，其中列出了使应用程序兼容 Linux 前，您需对项目或解决方案完成的所有变更。它包括需更新的项目和文件、待更新项的描述、问题说明。您可参考**建议**列，了解如何解决 Linux 兼容性问题。

1. 若要对文件进行就地更新，请在**操作**下拉菜单中选择**接受变更**。

# Amazon Q 开发者版如何转换 .NET 应用程序
<a name="how-dotnet-transformation-works"></a>

通过以下章节，详细了解 Amazon Q 开发者版执行 .NET 转换的工作原理。

## 分析应用程序并生成转换计划
<a name="analyzing-app-generating-plan"></a>

在转换开始前，Amazon Q 会先在本地编译您的代码，确保代码可编译且转换配置正确。然后，Amazon Q 会将您的代码上传到安全的加密构建环境 AWS，分析您的代码库，并确定移植应用程序所需的更新。

在分析过程中，Amazon Q 会将您的 .NET 解决方案或项目划分为多个代码组。代码组指一个项目及其所有依赖项的集合，它们共同构成一个可编译的代码单元，如动态链接库（DLL）或可执行文件。即便您未选择转换所有项目依赖项，Amazon Q 也会自动识别编译所选项目所需的依赖项，并一并转换，确保转换后的应用程序可编译且能直接投入使用。

代码分析完成后，Amazon Q 会生成一份转换计划，其中概述了拟执行的变更，包括待转换的代码组列表及其依赖项。

## 转换应用程序
<a name="transforming-app"></a>

转换启动后，Amazon Q 会先在安全构建环境中再次编译您的代码，确保代码可远程编译。随后，Amazon Q 开始移植应用程序。转换采用“自下而上”的方式：从最低层级的依赖项开始处理。若 Amazon Q 在移植某个依赖项时遇到问题，会暂停转换并提供错误原因相关信息。

转换包含对应用程序的以下更新：
+ 将代码中过时的 C\$1 版本替换为兼容 Linux 的 C\$1 版本
+ 将 .NET Framework 升级到跨平台 .NET，具体包括：
  + 识别和迭代替包、库和 APIs
  + 升级和更换 NuGet 软件包以及 APIs
  + 迁移到跨平台运行时
  + 配置中间件并更新运行时配置
  + 替换私有或第三方包 
  + 处理 IIS 和 WCF 组件 
  + 调试编译错误
+ 重写代码以实现 Linux 兼容性，包括对已废弃、低效的代码进行重构和重写，以适配现有代码的移植需求 

## 查看转换摘要并接受变更
<a name="reviewing-summary-accepting-changes"></a>

转换完成后，Amazon Q 会提供转换摘要，其中包含有关其对您的应用程序所做的拟议更新的信息，包括更改的文件数量、更新和 APIs 更改的软件包数量。它会标记所有未成功完成的转换（包括受影响的文件或文件片段、尝试编译时遇到的错误）。您还可查看包含编译日志的编译摘要，进一步了解已执行的变更。

转换摘要中还会提供 Linux 移植状态，用于指示应用程序要实现 Linux 兼容性是否需要额外的用户输入。若某个代码组中的任意项目需要您手动处理，可下载一份 Linux 就绪报告，其中包含 Amazon Q 在编译阶段无法解决的与 Windows 特性相关的注意事项。若任一代码组或文件需要人工干预，请查看报告以了解仍需执行的变更类型，以及（如适用）代码更新建议。这些变更必须手动完成，应用程序才能在 Linux 上运行。

在接受变更并对文件进行就地更新前，您可在差异视图中查看 Amazon Q 拟执行的变更。完成文件更新并处理 Linux 就绪报告中的所有事项后，您的应用程序即可在跨平台 .NET 环境中运行。

# 在 IDE 中排查 .NET 转换问题
<a name="troubleshooting-dotnet-transformation-IDE"></a>

通过以下章节，排查在 IDE 中使用 Amazon Q 开发者版执行 .NET 转换时的常见问题。

## 如何判断任务是否在正常推进？
<a name="job-progressing"></a>

若在“转换中心”中，Amazon Q 某个步骤耗时过长，您可通过输出日志查看任务是否仍在运行。若日志中持续生成诊断信息，则说明任务仍在正常执行。

要检查输出，请在 Visual Studio 中选择**输出**选项卡。在**显示以下来源的输出:**菜单中，选择 **Amazon Q 语言客户端**。

下方屏幕截图展示了 Amazon Q 在转换过程中生成的输出示例。

![\[Amazon Q 开发者版代码转换中心的屏幕截图，显示了 Amazon Q 语言客户端的输出。\]](http://docs.aws.amazon.com/zh_cn/amazonq/latest/qdeveloper-ug/images/code-transform-troubleshoot4.png)


## 为何部分项目未被选中进行转换？
<a name="projects-not-selected"></a>

Amazon Q 仅支持转换 C\$1 语言编写的特定项目类型。目前，Amazon Q 不支持移植 UI 层组件，也不支持转换使用 VB.NET 或 F\$1 语言编写的项目。有关支持的项目类型及 .NET 项目转换的其他先决条件，请参阅[步骤 1：先决条件](port-dotnet-application.md#transform-dotnet-prerequisites)。

## 若项目或解决方案无法转换，如何获取支持？
<a name="get-support"></a>

如果您无法自行解决问题，可以联系 支持 或您的 AWS 账户 团队提交支持案例。

要获得支持，请提供转换任务 ID， AWS 以便调查失败的作业。要查找转换作业 ID，请在 Visual Studio 中选择**输出**选项卡。在**显示以下来源的输出:**菜单中，选择 **Amazon Q 语言客户端**。

## 如何避免防火墙干扰转换作业？
<a name="firewall-inteference"></a>

如果您所在组织使用了防火墙，可能会干扰 Visual Studio 中的转换操作。您可暂时禁用 Node.js 中的安全检查，以排查或测试阻碍转换运行的因素。

环境变量 `NODE_TLS_REJECT_UNAUTHORIZED` 控制着重要的安全检查。设置`NODE_TLS_REJECT_UNAUTHORIZED`为 “0” 会禁用 Node.js 拒绝未经授权 TLS/SSL 的证书。这意味着：
+ 接受自签名证书
+ 允许过期证书
+ 允许主机名不匹配的证书
+ 忽略其他所有证书验证错误

如果您的代理使用自签名证书，可设置以下环境变量（无需禁用 `NODE_TLS_REJECT_UNAUTHORIZED`）：

```
NODE_OPTIONS = —use-openssl-ca
NODE_EXTRA_CA_CERTS = Path/To/Corporate/Certs
```

否则，您必须指定代理使用的 CA 证书，才能禁用 `NODE_TLS_REJECT_UNAUTHORIZED`。

**要在 Windows 中禁用 NODE\$1TLS\$1REJECT\$1UNAUTHORIZED，请执行以下操作：**

1. 打开“开始”菜单，搜索**环境变量**。

1. 选择**编辑系统环境变量**。

1. 在**系统属性**窗口中，选择**环境变量**。

1. 在**系统变量**下，选择**新建**。

1. 设置**变量名**为 NODE\$1TLS\$1REJECT\$1UNAUTHORIZED，**变量值**为 0。

1. 选择**确定**，保存更改。

1. 重启 Visual Studio。