

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

# 重構現代 .NET 並移至 Linux
<a name="net-refactor-linux"></a>

## 概觀
<a name="net-refactor-linux-overview"></a>

現代化舊版 .NET Framework 應用程式可協助您改善安全性、效能和可擴展性。現代化 .NET Framework 應用程式的有效方法是將應用程式遷移至現代 .NET 版本 (6\+)。以下是將這些應用程式移至開放原始碼 .NET 的一些主要優點：
+ 在 Linux 作業系統上執行以降低 Windows 授權成本
+ 利用現代語言的可用性
+ 取得最佳化以在 Linux 上執行的效能

許多組織仍在執行舊版的 .NET Framework。這可能會帶來安全風險，因為 Microsoft 不再處理較舊版本的漏洞。Microsoft 已停止支援最新版本的 .NET Framework 4.5.2、4.6 和 4.6.1。請務必評估繼續執行舊版架構的風險和好處。為了降低風險和降低成本，值得投入時間和精力來重構現代版本的 .NET。

## 成本影響
<a name="net-refactor-linux-cost"></a>

考慮一般用途的 EC2 執行個體類型 (m5)，可提供運算、記憶體和聯網資源的平衡。這些執行個體適用於各種應用程式，例如 Web 伺服器、中型資料庫和原始程式碼儲存庫。

例如，在美國東部 （維吉尼亞北部） 的 Windows Server （包含授權） 上具有 4 個 vCPUs和 16 GB 記憶體的隨需 m5.xlarge 執行個體每月花費 274.48 USD。Linux 伺服器上的相同資源每月花費 140.16 美元。在此範例中，當您將應用程式從 .NET Framework 遷移至現代版本的 .NET，並在 Linux 伺服器上執行應用程式時，成本會降低 49%。您的成本可能會因您在選取 [EC2 執行個體](https://aws.amazon.com/ec2/instance-explorer/?ec2-instances-cards.sort-by=item.additionalFields.category-order&ec2-instances-cards.sort-order=asc&awsf.ec2-instances-filter-category=*all&awsf.ec2-instances-filter-processors=*all&awsf.ec2-instances-filter-accelerators=*all&awsf.ec2-instances-filter-capabilities=*all)時選擇的選項 （例如，執行個體類型、作業系統、儲存體） 而有所不同。您可以使用 [Savings Plans](https://docs.aws.amazon.com/savingsplans/latest/userguide/what-is-savings-plans.html) 或[預留執行個體](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-reserved-instances.html)進一步最佳化成本。如需詳細資訊，請使用 [AWS 定價計算工具](https://calculator.aws/#/)執行成本估算。對於包含 Windows 的執行個體，無論定價模式為何，授權費用為[每小時每個 vCPU 0.046 USD](https://aws.amazon.com/ec2/dedicated-hosts/pricing/#Pricing_for_Dedicated_Hosts)。

將這些 .NET Framework 應用程式移植到現代 .NET 需要開發人員的努力。您必須評估您的應用程式及其相依性，以查看它們是否與目標平台版本相容。適用於 [AWS .NET 的移植助理](https://aws.amazon.com/blogs/aws/announcing-the-porting-assistant-for-net/)是一項輔助工具，可掃描 .NET Framework 應用程式並產生 .NET 相容性評估，協助您更快地移植應用程式以與 Linux 相容。適用於 .NET 的移植助理可識別與 .NET 的不相容、尋找已知的替代項目，並產生詳細的相容性評估。移植解決方案之後，您必須手動變更程式碼，您的專案才能透過相依性成功編譯。這可減少將應用程式現代化為 Linux 所涉及的手動工作。如果您的應用程式支援 ARM 處理器，移至 Linux 會釋放使用 Graviton 執行個體的能力。這可協助您達到額外 20% 的成本降低。如需詳細資訊，請參閱 AWS 運算部落格中的[使用 AWS Graviton2： Benchmarks 為 .NET 5 提供支援](https://aws.amazon.com/blogs/compute/powering-net-5-with-aws-graviton2-benchmark-results/)。

還有其他工具，例如 [AWS Toolkit for .NET Refactoring](https://docs.aws.amazon.com/tk-dotnet-refactoring/latest/userguide/what-is-tk-dotnet-refactoring.html) 和 [.NET Upgrade Assistant](https://learn.microsoft.com/en-us/dotnet/core/porting/upgrade-assistant-overview)，可協助您將舊版 .NET 架構應用程式移植到現代 .NET。

## 成本最佳化建議
<a name="net-refactor-linux-rec"></a>

若要遷移 .NET Framework 應用程式，請執行下列動作：

1. **先決條件** – 若要使用適用於 .NET 的移植助理，您必須在計劃分析應用程式原始碼的機器上安裝 .NET 5\+。機器上的資源必須至少有 1.8 GHz 的處理速度、4 GB 的記憶體和 5 Gb 的儲存空間。如需詳細資訊，請參閱適用於 .NET 的移植助理文件中[的先決條件](https://docs.aws.amazon.com/portingassistant/latest/userguide/porting-assistant-prerequisites.html)。

1. **評估** – 將 .NET 的移植助理下載為[可執行檔](https://s3.us-west-2.amazonaws.com/aws.portingassistant.dotnet.download/latest/windows/Porting-Assistant-Dotnet.exe) （下載）。您可以在機器上下載並安裝 工具，以開始評估您的應用程式。評估頁面包含與現代 .NET 不相容的移植專案、套件和 APIs。因此，在評估之後，您會在解決方案中收到建置錯誤。您可以檢視或下載評估問題清單至 CSV 檔案。如需詳細資訊，請參閱[適用於 .NET 的移植助理文件中的移植解決方案](https://docs.aws.amazon.com/portingassistant/latest/userguide/porting-assistant-port.html)。

1. **重構：**評估應用程式之後，您可以將專案移植到目標架構版本。當您移植解決方案時，您的專案檔案和一些程式碼將由移植助理修改。您可以檢查日誌，以檢閱原始程式碼的變更。在大多數情況下，程式碼需要額外的努力來完成遷移和測試，以使其生產準備就緒。根據應用程式，某些變更可能包括實體架構、身分和身分驗證。如需詳細資訊，請參閱[適用於 .NET 的移植助理文件中的移植解決方案](https://docs.aws.amazon.com/portingassistant/latest/userguide/porting-assistant-port.html)。

這是將您的應用程式現代化為容器的第一步。有許多商業和技術驅動程式可將 .NET Framework 應用程式現代化為 Linux 容器。其中一個重要驅動因素是透過從 Windows 作業系統轉移到 Linux 來降低總體擁有成本。這可降低將應用程式遷移至跨平台版本的 .NET 和容器以最佳化資源使用率時的授權成本。

將應用程式移植到 Linux 之後，您可以使用 [AWS App2Container](https://aws.amazon.com/app2container/) 將應用程式容器化。App2Container 使用 Amazon ECS 或 Amazon EKS 做為您可以直接部署的端點服務。App2Container 提供所有必要的基礎設施做為程式碼 (IaC) 部署成品，以重複容器化您的應用程式。

## 其他考量事項和資源
<a name="net-refactor-linux-resources"></a>
+ 如果您的應用程式建置在 VB.NET (2002 年的傳統架構） 上，並想要將應用程式移植到 .NET 6，請參閱 AWS 部落格上的[使用適用於 .NET 的移植助理將舊版 VB.NET 應用程式移植到 .NET 6.0](https://aws.amazon.com/blogs/modernizing-with-aws/port-legacy-vb-net-applications-to-net-6-0-with-porting-assistant-for-net/)。
+ 如果您在 Windows Communication Foundation (WCF) 上有舊版應用程式，並想要在現代 .NET 上執行，則可以採用 CoreWCF。如需詳細資訊，請參閱 AWS 部落格 Microsoft 工作負載上的[使用適用於 .NET 的移植助理將舊版 WCF 應用程式現代化為 CoreWCF ](https://aws.amazon.com/blogs/modernizing-with-aws/migrate-wcf-apps-to-wcfcore-using-porting-assistant/) 文章。
+ 您可以將移植助理新增為 Visual Studio IDE 的延伸。這可讓您執行轉換程式碼所需的所有任務，而無需在 IDE 和 .NET 的移植助理工具之間切換。如需詳細資訊，請參閱 AWS 部落格 Microsoft [工作負載上的使用適用於 .NET Visual Studio IDE 的移植助理加速 .NET 應用程式現代化延伸](https://aws.amazon.com/blogs/modernizing-with-aws/net-modernization-with-pa-vs-ide-extension/)文章。
+ 適用於 .[AWS NET 的移植助理現在是開放原始碼工具](https://aws.amazon.com/blogs/opensource/open-sourcing-the-porting-assistant-for-net/)，具有評估的原始程式碼和相容性分析元件。這可以鼓勵您的開發人員使用和共用 .NET 移植知識和最佳實務。
+ 您可以使用 AWS Toolkit for .NET Refactoring，將 .NET 架構應用程式移植到 Linux 上的現代 .NET。如需詳細資訊，請參閱部落格上 Microsoft 工作負載上的[使用 AWS Toolkit for .NET Refactoring 文章加速 .NET 現代化](https://aws.amazon.com/blogs/modernizing-with-aws/aws-toolkit-for-net-refactoring-launch/)。 AWS 
+ 您可以[加速 ASP.NET Core 應用程式 AWS 使用 的容器化和遷移 AWS App2Container](https://aws.amazon.com/blogs/modernizing-with-aws/containerize-asp-net-core-applications-using-aws-app2container/)。