

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 Amazon Q Developer 轉換 .NET 應用程式
<a name="transform-dotnet-IDE"></a>

Amazon Q Developer 可以透過採用生成式 AI 技術的重構工作流程，將 Windows 型 .NET 應用程式移植到與 Linux 相容的跨平台 .NET 應用程式。Amazon Q 還可協助您將過時的跨平台 .NET 應用程式版本升級至較新的版本。

為了轉換 .NET 解決方案或專案，Amazon Q 會分析您的程式碼基底、確定移植您的應用程式所需的更新，並且在轉換開始之前產生轉換計畫。在此分析期間，Amazon Q 會將您的 .NET 解決方案或專案分成程式碼群組，方便您在轉換計畫中檢視。*程式碼群組*是專案及其所有相依性，這些會共同產生可建置的程式碼單位，例如動態連結程式庫 (DLL) 或可執行檔。

在轉換期間，Amazon Q 會在 Transformation Hub 提供逐步更新，您可在此監控進度。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 Developer 移植 .NET 應用程式](port-dotnet-application.md)
+ [Amazon Q Developer 如何轉換 .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)。


| 資源 | 配額 | 
| --- | --- | 
| 每個任務的程式碼行數 | 100,000 行程式碼 | 
| 並行任務數 |  每個使用者 1 個任務 每個 AWS 帳戶 2 個任務  | 

# 在 Visual Studio 中使用 Amazon Q Developer 移植 .NET 應用程式
<a name="port-dotnet-application"></a>

完成這些步驟，以在 Visual Studio 中使用 Amazon Q Developer 將 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 仍會嘗試轉換您的程式碼。
+ 如果您的應用程式相依於 Internet Information Services (IIS)，則只會使用預設 IIS 組態
+ Amazon Q 將評估您選取的專案類型及其相依性，以建立程式碼群組。您的程式碼群組只會包含下列專案類型：
  + 主控台應用程式
  + 類別庫 
  + Web API
  + WCF 服務
  + Model View Controller (MVC) 和 Single Page Application (SPA) 的商業邏輯層
  + 測試專案

**注意**  
Amazon Q 不支援轉換 UI 層元件，例如 Razor 檢視或 WebForms ASPX 檔案。如果 Amazon Q 在解決方案或專案中偵測到 UI 層元件，則會藉由排除 UI 層元件的方式執行部分轉換，而且您可能需要進一步重構，才能在目標 .NET 版本上建置程式碼。

## 步驟 2：轉換應用程式
<a name="transform-dotnet-app"></a>

若要轉換 .NET 解決方案或專案，請完成下列程序：

1. 在 Visual Studio 中開啟您要轉換的任何 C\$1 型解決方案或專案。

1. 在編輯器中開啟任何 C\$1 檔案。

1. 選擇**解決方案總管**。

1. 在解決方案總管中，用滑鼠右鍵按一下您要轉換的解決方案或專案，然後選擇**使用 Amazon Q Developer 移植**。

1. **使用 Amazon Q Developer 移植**視窗隨即出現。

   **選擇要轉換的解決方案或專案**下拉式功能表中已選擇您選取的解決方案或專案。您可以展開功能表，以選擇不同的解決方案或專案來進行轉換。

   在**選擇 .NET 目標**下拉式功能表中，選擇您要升級的目標 .NET 版本。

1. 選擇**確認**以開始轉換。

1. Amazon Q 會開始轉換您的程式碼。您可以檢視其產生的轉換計畫，以了解其如何轉換您的應用程式的詳細資訊。

   此時 **Transformation Hub** 會開啟，您可以在此監控轉換期間的進度。Amazon Q 完成**等待任務轉換啟動**步驟後，您可以在轉換期間瀏覽至專案或解決方案以外的位置。

1. 轉換完成後，瀏覽至 **Transformation Hub**，然後選擇**檢視差異**，以在差異檢視中檢閱 Amazon Q 提議的變更。

1. 選擇**檢視程式碼轉換摘要**，以取得 Amazon Q 所做變更的詳細資訊。您也可以選擇**將摘要下載為 .md**，以下載轉換摘要。

   如果在 Linux 移植狀態下，**程式碼群組**表中的任何項目需要輸入，您必須手動更新一些檔案，才能在 Linux 上執行應用程式。

   1. 從**動作**下拉式功能表中，選擇**下載 Linux 整備報告**。

   1. 此時會開啟一個 .csv 檔案，其中包含您必須完成的任何專案或解決方案變更，如此您的應用程式才會與 Linux 相容。檔案中包含需要更新的專案和檔案、要更新的項目說明，以及問題的說明。使用**建議**欄，以獲得如何解決 Linux 整備問題的想法。

1. 若要就地更新您的檔案，請從**動作**下拉式功能表選擇**接受變更**。

# Amazon Q Developer 如何轉換 .NET 應用程式
<a name="how-dotnet-transformation-works"></a>

請檢閱下列各節，了解如何使用 Amazon Q Developer 進行 .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，包括：
  + 識別並反覆取代套件、程式庫和 API
  + 升級和取代 NuGet 套件和 API
  + 轉換為跨平台執行時期
  + 設定中介軟體並更新執行時期組態
  + 取代私有或第三方套件 
  + 處理 IIS 和 WCF 元件 
  + 對建置錯誤進行偵錯
+ 重寫程式碼使其與 Linux 相容，包括重構和重寫已棄用且效率不佳的程式碼，以移植現有程式碼 

## 檢閱轉換摘要並接受變更
<a name="reviewing-summary-accepting-changes"></a>

轉換完成後，Amazon Q 會提供轉換摘要，其中包含對您的應用程式提出的提議更新相關資訊，包括變更的檔案數、更新的套件，以及變更的 API。它會標記任何未成功的轉換，包括受影響的檔案或部分檔案，以及在嘗試建置期間遇到的錯誤。您也可以使用建置日誌檢視建置摘要，以進一步了解所做的變更。

轉換摘要也會提供 Linux 移植狀態，其指出是否需要額外的使用者輸入才能使應用程式與 Linux 相容。如果程式碼群組中的任何項目需要您輸入，您可以下載 Linux 整備報告，其中包含 Amazon Q 在建置時無法解決的 Windows 特定考量。如果任何程式碼群組或檔案需要輸入，請檢閱報告以取得仍需要進行何種變更的詳細資訊，並取得如何更新程式碼的建議 (如適用)。您必須先手動進行這些變更，才能在 Linux 上執行您的應用程式。

您可以先在差異檢視中檢閱 Amazon Q 所做的提議變更，再接受變更以就地更新您的檔案。更新您的檔案並解決 Linux 整備報告中的任何項目後，您的應用程式就可在跨平台 .NET 上執行。

# IDE 中 .NET 轉換問題的故障診斷
<a name="troubleshooting-dotnet-transformation-IDE"></a>

利用下列各節對 IDE 中使用 Amazon Q Developer 進行 .NET 轉換時的常見問題進行故障診斷。

## 如何知道任務是否正在進行？
<a name="job-progressing"></a>

如果 Amazon Q 似乎在 Transformation Hub 中的某個步驟花很長的時間，您可以在輸出日誌中查看任務是否仍為作用中。如果產生診斷訊息，表示任務仍為作用中。

若要查看輸出，請在 Visual Studio 中選擇**輸出**索引標籤。在**顯示輸出來源：**功能表中，選擇 **Amazon Q 語言用戶端**。

下面的螢幕擷取畫面顯示 Amazon Q 在轉換期間所產生輸出的範例。

![\[Amazon Q Developer Code Transformation Hub 螢幕擷取畫面，顯示來自 Amazon Q 語言用戶端的輸出。\]](http://docs.aws.amazon.com/zh_tw/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。