赞
踩
在本模块中,您将把在 .NET Framework 上运行的 ASP.NET MVC 应用程序升级到 ASP.NET Core。
假设您是一家名为 Contoso Pizza 的披萨公司的员工。您的经理要求您评估是否应该将在 .NET Framework 4.8.1 上运行的用 ASP.NET MVC 5 编写的现有内部应用程序升级到 ASP.NET Core。
在本模块中,您将:
在本课程结束时,您将能够将小型 ASP.NET MVC 应用程序从 .NET Framework 4.8.1 升级到 ASP.NET Core。您将了解升级助手如何帮助您分析和增量升级现有的 ASP.NET 应用程序,以及完成升级所需的手动迁移步骤。您将知道在哪里可以找到针对更复杂的迁移场景的其他指导和资源。
在本单元中,您将了解何时以及为何将 .NET Framework 上运行的现有 ASP.NET 应用程序升级到 ASP.NET Core。
ASP.NET Core 是 ASP.NET 的最新版本,它包含对 ASP.NET MVC 的许多改进。ASP.NET Core 和 ASP.NET MVC 之间最显着的区别是它运行在最新版本的 .NET(以前称为 .NET Core)上,这是跨平台的。您可以使用它构建可以在 Windows、Linux 或 macOS 上运行的 Web 应用程序。与在 .NET Framework 上运行的 ASP.NET MVC 相比,在 .NET 上运行的 ASP.NET Core 提供了许多优势。有关以下优点的详细信息,请参阅ASP.NET Core 文档:
让我们更详细地讨论一些主要好处。
.NET 上的 ASP.NET Core 提供比 .NET Framework 高得多的性能。这种性能改进提供了几个潜在的优势,包括对单个响应的更快响应、更高的吞吐量、更高的服务器效率以及减少的内存使用。所有这些改进都可以通过使用更少的服务器资源提供更多响应来节省成本。
许多案例研究已经记录了这些性能优势。Microsoft Entra ID 每天处理 1150 亿个请求,并通过迁移到 .NET Core 将 CPU 成本降低了 50%。Bing 记录了迁移到 .NET Core 2.1 后服务器延迟降低了 34%。一旦 Bing 在 .NET Core 上运行,团队就能够利用每个 .NET Core 版本更新,并继续在每个更新中看到巨大的改进。性能改进仍然是创新的重点,进一步将 .NET 与 .NET Framework 区分开来。请考虑以下跟踪各种增量改进的性能博客文章:
.NET Framework 是仅限 Windows 的框架,而 ASP.NET Core 是跨平台框架。ASP.NET Core 可以在 Windows、macOS 和 Linux 上开发和托管。这种跨平台支持可实现开发人员环境、CI/CD 管道和部署的灵活性。开发人员和设计人员经常在 Windows 和 macOS 环境中工作,并将应用程序部署到各种托管环境,包括 Linux、Docker、Windows 和云托管平台。
将应用程序更新到 ASP.NET Core 使您可以访问最新版本的流行 NuGet 库、现代开发工具以及来自商业工具供应商的最新组件。
.NET Framework 继续受到支持并接收安全更新,但更新不包括新功能。更新到 ASP.NET Core 使您可以访问年度版本更新中的新功能。
评估 ASP.NET 应用程序的现代化选项和机会
完全的
100 经验值
4分钟
假设您是一家名为 Contoso Pizza 的披萨公司的员工。您的团队维护一个用 ASP.NET MVC 5 编写并在 .NET Framework 4.8 上运行的内部应用程序。您的经理要求您评估是否应该将应用程序升级到 ASP.NET Core。
选项 1:保持原样
.NET Framework 上的 ASP.NET MVC 继续由 Microsoft 支持和维护。虽然这对于新项目来说不是一个好的选择,但您可能会认为它是您现有项目的最佳选择。当您权衡升级应用程序的成本和收益时,您应该考虑保留 .NET Framework 作为一个有效的选择。您仍然可以使用使用 Visual Studio 将 ASP.NET Web 应用程序迁移到 Azure学习路径来探索将现有 ASP.NET 应用程序迁移到 Azure 的好处。
选项 2:完全升级到 ASP.NET Core
如果您的项目时间表和预算允许完全升级到 ASP.NET Core,您应该考虑此选项。完整的升级将为您提供 ASP.NET Core 的全部优势,并可以简化在混合环境中运行时遇到的问题。
选项 3:增量升级
在许多情况下,开发团队决定对 ASP.NET Core 实施分阶段更新。此迁移策略将允许您继续使用现有的 ASP.NET MVC 5 应用程序,但将允许您通过一系列较小的步骤升级 .NET 运行时。您将首先按垂直切片或水平层划分应用程序,然后将每个部分作为单独的步骤进行升级。
额外的机会
升级到 ASP.NET Core 为您提供了一些托管和部署应用程序的新机会。您可能需要考虑这些,将其作为升级计划的一部分或作为升级计划的后续措施。
迁移到云端
ASP.NET Core 针对云托管进行了优化,您可以考虑将全部或部分应用程序迁移到云,作为升级到 ASP.NET Core 的一部分或后续操作。您可以使用Azure 应用服务迁移助手(一种自动将 Web 应用程序从本地迁移到云的免费且简单的路径)来简化将 .NET Framework Web 应用程序迁移到云的过程,只需进行最少的代码更改或无需更改任何代码。
更新为基于容器的部署
虽然 .NET Framework 上的 ASP.NET MVC 仅限于在 Windows 上的 IIS 中运行,但 ASP.NET Core 应用程序具有许多部署选项,包括容器。有关为何以及如何在 ASP.NET Core 中使用基于容器的部署的更多信息,请参阅我们的微服务与 .NET指南。
在本单元中,您将了解 .NET Upgrade Assistant 如何帮助您分析现有的 ASP.NET 应用程序并规划到 ASP.NET Core 的升级。
.NET Upgrade Assistant是一个工具,可帮助您将不同类型的应用程序从旧版本的 .NET Framework、.NET Core、.NET 5 和 .NET 6 升级到最新的 .NET 版本。它有两种“风格”:Visual Studio 扩展和 CLI 工具。运行升级助手后,在某些情况下,应用程序将需要额外的努力才能完成升级。该工具通过附加分析器不断更新,自动修复重大更改并简化升级过程,因此请确保您拥有该工具的最新版本。
Visual Studio 扩展很方便,并在整个升级过程中提供图形反馈,因此在本单元中我们将展示如何使用该扩展。同时,如果您更喜欢使用 CLI,可以在 GitHub 上获取文档和安装程序。
要继续操作,您需要下载并安装 VS 扩展:
该工具支持以下 .NET Framework 应用程序类型:
它从以下版本的 .NET 升级应用程序:
最新的标准期限支持 (STS)、长期支持 (LTS) 或 .NET 预览版本。
命令行版本的升级助手工具也支持升级:
升级解决方案时,该工具将:
Microsoft.Windows.Compatibility
。提示
升级助手和升级文档重复引用了TFM。TFM 是Target Framework Moniker的缩写,用于指示项目或库可用的 API 集。一些 TFM 示例包括net48
.NET Framework 4.8 和net7.0
.NET 7.0。升级助手将为您处理项目文件中的 TFM 转换。
使用 .NET Upgrade Assistant 时可能会出现几个已知问题。在某些情况下,这些是.NET Upgrade Assistant 内部使用的try-convert 工具的问题。
该工具的 GitHub 存储库提供了更多故障排除提示和已知问题。
在本单元中,您将使用升级助手将 ASP.NET MVC 5 应用程序升级到 ASP.NET Core。
本部分演示针对面向 .NET Framework 的现有 ASP.NET MVC 应用程序运行 .NET Upgrade Assistant。
可以从 Visual Studio 中的扩展管理器安装 .NET Upgrade Assistant 扩展,但在本练习中,您将使用 Visual Studio 安装程序。这样,您还可以仔细检查是否拥有构建示例应用程序所需的组件。
让我们获取示例应用程序。它只是从 ASP.NET MVC 模板生成的标准样板应用程序。
打开 Visual Studio 2022。
使用快速启动窗口上的克隆存储库按钮或菜单栏上的Git > 克隆https://github.com/MicrosoftDocs/mslearn-modernize-aspnet-framework-to-core
命令,从 . 下载并打开示例存储库。
项目打开后,在解决方案资源管理器中查看文件。该应用程序是在 .NET Framework 4.8.1 中构建的 ASP.NET 项目。按F5运行该应用程序。验证其有效后,停止该应用程序。
在“解决方案资源管理器”中,右键单击“AspNetMvcTest”项目并选择“升级”。
升级助手选项卡打开。由于要升级的应用程序是 ASP.NET MVC 应用程序,因此唯一可用的选项是并行增量项目升级。
这种升级方法非常适合网络应用程序。它生成一个新的 .NET 项目,该项目实现 YARP(又一个反向代理)。如果请求资源 URL 但在新项目中找不到,则请求将转发到旧项目。这样,您就可以逐步迁移到新应用程序,而不会丢失任何功能。
选择并行增量项目升级。
选择“新建项目”,然后选择“下一步”。
为新项目选择一个名称。助手建议名称为AspNetMvcTestCore。这已经足够描述了,所以就别管它了。验证项目模板是否设置为ASP.NET Core MVC并选择Next。
选择您的目标框架。选择.NET 7.0并选择下一步。
检查要执行的任务:
升级助手将:
选择“完成”,升级助手将完成初始迁移。
选择“完成”以查看升级摘要。
从这里,您可以将类和控制器增量移动到新项目。
选择端点资源管理器按钮并查看端点。
显示检测到的路线和端点。请注意,端点是家庭控制器上的所有操作。
选择升级下拉列表并选择控制器。
在“选择要升级的控制器”对话框中,选择AspNewMvcTest.Controllers.HomeController并选择Upgrade。
在“选择组件”对话框中,展开树视图上的所有节点。
升级助手已检测到需要迁移以支持家庭控制器的路由、类和视图。
选择升级选择以升级所选组件。
选择端点资源管理器并注意端点和路由现在出现在新项目中。
完成升级助手中的步骤后,您需要完成一些手动步骤才能完成升级。静态.js和.css文件不是自动升级的一部分,因此您需要采取替代方法。对于此应用程序,我们将手动移动它们。
应由 Web 服务器提供服务的静态文件应移动到名为 的根级文件夹中的适当文件夹中wwwroot
。有关详细信息,请参阅ASP.NET Core 中的静态文件。
在AspNewMvcTextCorewwwroot
项目的根目录中创建一个新目录。
wwwroot
创建一个名为 的子目录css
。
创建另一个子目录wwwroot
命名为js
。
将以下文件从旧AspNetMvcTest项目Content
中的目录复制到新AspNetMvcTestCore项目中: wwwroot/css
将以下文件从旧AspNetMvcTest项目Scripts
中的目录复制到新AspNetMvcTestCore项目中: wwwroot/js
所需的静态文件已被移动。
静态文件位于它们需要的位置,因此现在我们可以更新 Razor 布局以反映它们的新位置。
在新的 AspNetMvcTestCore项目中,打开Views/Shared/_Layout.cshtml
.
在元素中找到以下行<head>
:
- @*@Styles.Render("~/Content/css")*@
- @*@Scripts.Render("~/bundles/modernizr")*@
将上面的行替换为:
- <link rel="stylesheet" href="~/css/bootstrap.min.css" />
- <link rel="stylesheet" href="~/css/site.css" />
从元素底部找到以下行<body>
:
- @*@Scripts.Render("~/bundles/jquery")*@
- @*@Scripts.Render("~/bundles/bootstrap")*@
将上面的行替换为:
- <script src="~/js/jquery-3.6.4.min.js"></script>
- <script src="~/js/jquery.validate.min.js"></script>
- <script src="~/js/jquery.validate.unobtrusive.min.js"></script>
- <script src="~/js/modernizr-2.8.3.js"></script>
- <script src="~/js/bootstrap.min.js"></script>
返回“摘要”对话框,并注意旧的 .NET Framework 应用程序中不保留任何未升级的终结点。您可能需要构建应用程序来更新助手。
当您按下 时F5,应用程序应该会成功构建并运行。恭喜!
如果此应用程序有更多控制器,您将为其他控制器重复此过程,直到升级整个应用程序。
现在所有端点都已迁移,不再需要反向代理映射到旧项目。
在新应用程序中,完成以下步骤来删除 YARP:
builder.Services.AddReverseProxy().LoadFromConfig()
.app.MapReverseProxy();
.ReverseProxy
配置对象。现在可以独立于原始应用程序来构建和部署新应用程序。
笔记
在这个简单的场景中,您能够一步完成现代化。在许多现实世界的应用中,现代化需要更长的时间。在这种情况下,YARP 代理将保留在适当的位置,以便您可以增量更新您的应用程序。
在本部分中,您完成了一个简单的特定测试场景的升级:默认的 ASP.NET MVC 5 应用程序,没有身份验证、数据访问、其他 NuGet 包或自定义代码。在更复杂的场景中,您需要完成ASP.NET Core 迁移指南中详细介绍的其他迁移步骤。
在本模块中,您研究了何时以及为何将 .NET Framework 上运行的现有 ASP.NET 应用程序现代化为 ASP.NET Core。您探索了在 .NET Framework 上运行的 ASP.NET 应用程序的现代化选项和机会。您学习了如何使用 .NET Upgrade Assistant 分析现有 ASP.NET 应用程序并计划升级到 ASP.NET Core,并且学习了如何使用 .NET Core CLI 升级 ASP.NET 应用程序。
更深入地了解 .NET Upgrade Assistant 的文档:
请参考以下内容,了解有关如何将 ASP.NET 应用程序现代化为 ASP.NET Core 的深入信息:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。