

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

# 重构为现代的 .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 v CPUs 和 16 GB 内存的按需 m5.xlarge 实例每月的费用为 274.48 美元。在 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)时所选的选项（例如实例类型、操作系统、存储等）的不同而有所差异。您可以使用[节省计划](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 美元](https://aws.amazon.com/ec2/dedicated-hosts/pricing/#Pricing_for_Dedicated_Hosts)。

将这些基于 .NET Framework 应用程序移植到现代 .NET 需要开发人员付出努力。您必须评估您的应用程序及其依赖关系，以查看它们是否与目标平台版本兼容。[AWS Porting Assistant for .NET](https://aws.amazon.com/blogs/aws/announcing-the-porting-assistant-for-net/) 是一款辅助工具，它能够扫描 .NET Framework 应用程序，并生成 .NET 兼容性评测报告，以帮助您更快地移植应用程序以与 Linux 兼容。Porting Assistant for .NET 能够识别与 .NET 的不兼容之处，找出已知的替换方案，并生成详细的兼容性评测报告。在移植您的解决方案之后，您必须手动更改代码，以便您的项目能够使用依赖关系成功编译。这减少了将您的应用程序现代化迁移至 Linux 所需的人工工作量。如果您的应用程序支持 ARM 处理器，迁移到 Linux 便能解锁使用 Graviton 实例的能力。这将有助于您再节省 20% 的成本。有关更多信息，请参阅《计算》博客中的 “[使用 AWS Graviton2 为.NET 5 提供支持：基准测试](https://aws.amazon.com/blogs/compute/powering-net-5-with-aws-graviton2-benchmark-results/)” AWS 。

还有一些其他工具，例如[适用于 .NET 重构的AWS Toolkit](https://docs.aws.amazon.com/tk-dotnet-refactoring/latest/userguide/what-is-tk-dotnet-refactoring.html) 和 [.NET 升级助手](https://learn.microsoft.com/en-us/dotnet/core/porting/upgrade-assistant-overview)，它们能够帮助您将遗留的 .NET Framework 应用程序移植到现代的 .NET。

## 成本优化建议
<a name="net-refactor-linux-rec"></a>

要迁移 .NET Framework 应用程序，请执行以下操作：

1. **先决条件** – 要使用 Porting Assistant for .NET，您必须在计划分析应用程序源代码的计算机上安装 .NET 5\+ 版本。计算机上的资源必须至少具有 1.8 的 GHz 处理速度、4 GB 的内存和 5 Gb 的存储空间。有关更多信息，请参阅 Porting Assistant for .NET 文档中的[先决条件](https://docs.aws.amazon.com/portingassistant/latest/userguide/porting-assistant-prerequisites.html)。

1. **评测** – 下载 Porting Assistant for .NET 作为[可执行](https://s3.us-west-2.amazonaws.com/aws.portingassistant.dotnet.download/latest/windows/Porting-Assistant-Dotnet.exe)（下载）文件。您可以下载并将该工具安装到您的计算机上，以开始对您的应用程序进行评测。评估页面包含移植的项目、软件包 APIs ，它们与现代.NET 不兼容。因此，在评测完成后，您在解决方案中会遇到构建错误。您可以查看评测调查发现或将其下载到 CSV 文件中。有关更多信息，请参阅 Porting Assistant for .NET 文档中的[移植解决方案](https://docs.aws.amazon.com/portingassistant/latest/userguide/porting-assistant-port.html)。

1. **重构** – 评测应用程序后，您可以将项目移植到目标框架版本。移植解决方案时，您的项目文件以及部分代码将会由 Porting Assistant 进行修改。您可以检查日志，以查看对您源代码所做的更改。在大多数情况下，要完成代码迁移和测试工作以使其达到可投入生产状态，还需要付出额外的努力。根据应用程序的不同，这些更改可能包括实体框架、身份和身份验证等。有关更多信息，请参阅 Porting Assistant for .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，请参阅博客上的 Microsoft Workdloads [博客上的 “使用适用于.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/)”。 AWS 
+ 如果您在 Windows Communication Foundation（WCF）上运行的是旧版应用程序，并且想在现代 .NET 上运行它们，您可以采用 CoreWCF。有关更多信息，请参阅 Microsoft [Workdloads 博客上的 “使用适用于.NET 的移植助手将传统 WCF 应用程序现代化为 Cor](https://aws.amazon.com/blogs/modernizing-with-aws/migrate-wcf-apps-to-wcfcore-using-porting-assistant/) eWCF” 的文章。 AWS 
+ 您可以将移植助手作为扩展程序添加到您的 Visual Studio IDE 中。这使得您能够执行代码转换所需的所有任务，而无需在您的 IDE 和 Porting Assistant for .NET 工具之间来回切换。有关更多信息，请参阅微软工作负载博客上的 “[使用适用于.NET 的移植助手 Visual Studio IDE 加速.NET 应用程序现代化” 扩展](https://aws.amazon.com/blogs/modernizing-with-aws/net-modernization-with-pa-vs-ide-extension/) AWS 文章。
+ [AWS Porting Assistant for .NET 现在是一款开源工具](https://aws.amazon.com/blogs/opensource/open-sourcing-the-porting-assistant-for-net/)，其中包含源代码以及评测的兼容性分析组件。这能够鼓励您的开发人员去使用和共享 .NET 移植知识和最佳实践。
+ 您可以使用.NET 重构 AWS 工具包将.NET 框架应用程序移植到 Linux 上的现代.NET 中。有关更多信息，请参阅 Microsof [t Workdloads 博客上的 “使用适用于.NET 重构的 AWS 工具包加速.NET 现代化](https://aws.amazon.com/blogs/modernizing-with-aws/aws-toolkit-for-net-refactoring-launch/)” AWS 一文。
+ 您可以[加快 ASP.NET Core 应用程序的容器化以及向使用的迁移](https://aws.amazon.com/blogs/modernizing-with-aws/containerize-asp-net-core-applications-using-aws-app2container/)。 AWS AWS App2Container