练习 - 将应用升级到 ASP.NET Core

已完成

在本单元中,你将使用升级助手将 ASP.NET MVC 5 应用程序升级到 ASP.NET Core。

升级 .NET Framework ASP.NET MVC 应用

本部分演示如何针对现有的面向 .NET Framework 的 ASP.NET MVC 应用运行 NET 升级助手。

验证工具是否已安装

可以从 Visual Studio 中的扩展管理器安装 .NET 升级助手扩展,但在本练习中,你将使用 Visual Studio 安装程序。 这样一来,你还可以仔细检查是否具有生成示例应用所需的组件。

  1. 启动 Visual Studio 安装程序,然后在 Visual Studio 2022 安装中选择“修改”。
  2. 在“工作负载”选项卡上,确保选择了“ASP.NET 和 Web 开发”工作负载。
  3. 在“单个组件”选项卡上,搜索以下组件并确保已选中它们
    • .NET Framework 4.8.1 目标包
    • .NET 升级助手
  4. 选择“修改”按钮(如果存在)以应用任何更改。 如果未进行任何更改,请选择“关闭”。

获取示例代码

让我们获取示例应用,它只是一个从 ASP.NET MVC 模板生成的标准样板应用。

  1. 打开 Visual Studio 2022。

  2. 使用快速启动窗口上的“克隆存储库”按钮或菜单栏上的“Git”>“克隆”命令,从 https://github.com/MicrosoftDocs/mslearn-modernize-aspnet-framework-to-core 下载并打开示例存储库。

    Visual Studio git clone 菜单命令的屏幕截图。

  3. 项目打开后,查看解决方案资源管理器中的文件。 该应用是在 .NET Framework 4.8.1 中构建的 ASP.NET 项目。 按 F5 运行该应用。 验证它是否正常工作后,停止该应用。

运行升级助手

  1. 在“解决方案资源管理器”中,右键单击“AspNetMvcTest”项目,然后选择“升级”

    解决方案资源管理器的屏幕截图,其中显示了项目的上下文菜单,并突出显示了“升级”命令。

    此时会打开“升级助手”选项卡。 选择“将项目升级到更新的 .NET 版本”。 由于要升级的应用是 ASP.NET MVC 应用,因此唯一可用的选项是“并行增量项目升级”

    升级助手欢迎屏幕的屏幕截图。仅显示一个选项:并行增量项目升级。

    这种升级方法非常适合 Web 应用。 它生成一个新的 .NET 项目来实现 YARP (Yet Another Reverse Proxy)。 如果请求了资源 URL,但在新项目中找不到,则会将请求转发到旧项目。 这样,就可以以增量方式迁移到新应用,而不会丢失任何功能。

  2. 选择“并行增量项目升级”。

  3. 选择“下一步”,然后选择“新建项目”

  4. 选择下一步

  5. 选择新项目的名称。 助手建议命名为 AspNetMvcTestCore。 该名称足具描述性了,所以直接沿用。 验证项目模板是否设置为 ASP.NET Core MVC,然后选择“下一步”。

  6. 选择目标框架。 选择“.NET 7.0”,然后选择“下一步”。

  7. 查看要执行的任务:

    向导最后一个屏幕的屏幕截图,显示了在创建新的 AspNetMvcTestCore 项目时要执行的任务。

    升级助手将:

    • 创建新的 ASP.NET Core 项目。
    • 设置新的“开始”操作(不要打开页面)。
    • 将这两个项目设置为解决方案的启动项目。
    • 将 YARP 和 System.Web 适配器包添加到新项目。
    • 将 YARP 设置添加到 appsettings.json。 这些设置将配置为将请求转发到旧项目。
  8. 选择“完成”。 升级助手将完成初始迁移。

  9. 选择“完成”以查看升级摘要。

    显示终结点分发的摘要屏幕的屏幕截图。目前,所有终结点都在 ASP.NET MVC 项目中。

增量升级控制器

在此处,可以增量方式将类和控制器移动到新项目。

  1. 选择“终结点资源管理器”按钮并查看终结点。

    终结点资源管理器步骤的屏幕截图,其中显示了检测到的终结点,所有这些终结点都位于 HomeController 上。

    将显示检测到的路由和终结点。 请注意,终结点是主控制器上的所有操作。

  2. 选择“升级”下拉菜单,然后选择“控制器”

  3. 在“选择要升级的控制器”对话框中,选择“AspNewMvcTest.Controllers.HomeController”,然后选择“升级”。

  4. 在“选择组件”对话框中,展开树视图中的所有节点

    “选择组件”对话框的屏幕截图,其中展开了树视图。

    升级助手检测到需要迁移以支持主控制器的路由、类和视图。

  5. 选择“升级选定内容”以升级所选组件。

  6. 选择“终结点资源管理器”,并注意终结点和路由现在存在于新项目中。

完成手动升级步骤

完成升级助手中的步骤后,需要完成一些手动步骤才能完成升级。 静态 .js 和 .css 文件不是自动升级的一部分,因此你需要采用替代方法。 对于此应用,我们将手动移动这些文件。

将静态文件移动到 wwwroot

应将 Web 服务器提供的静态文件移动到名为 wwwroot 的根级文件夹下的相应文件夹中。 有关详细信息,请查看 ASP.NET Core 中的静态文件

  1. 在 AspNewMvcTextCore 项目的根目录中创建一个新的 wwwroot 目录。

  2. wwwroot 创建名为 css 的子目录。

  3. wwwroot 创建另一个名为 js 的子目录。

    带有 js 和 css 子目录的 wwwroot 目录的屏幕截图。

  4. 将以下文件从 oldAspNetMvcTest 项目中的 Content 目录复制到 newAspNetMvcTestCore 项目中的 wwwroot/css

    • bootstrap.min.css
    • Site.css
  5. 将以下文件从 oldAspNetMvcTest 项目中的 Scripts 目录复制到 newAspNetMvcTestCore 项目中的 wwwroot/js

    • bootstrap.min.js
    • jquery-3.6.4.min.js
    • jquery.validate.min.js
    • jquery.validate.unobtrusive.min.js
    • modernizr-2.8.3.js

所需的静态文件已被移动。

包含所有必需文件的 wwwroot 目录和子目录的屏幕截图。

更新“布局”页中的静态文件引用

静态文件在它们该在的地方,因此现在我们可以更新 Razor 布局以反映其新位置。

  1. 在新的 AspNetMvcTestCore 项目中,打开 Views/Shared/_Layout.cshtml

  2. <head> 元素中找到以下行:

    @*@Styles.Render("~/Content/css")*@
    @*@Scripts.Render("~/bundles/modernizr")*@
    
  3. 请将上面的行替换为:

    <link rel="stylesheet" href="~/css/bootstrap.min.css" />
    <link rel="stylesheet" href="~/css/site.css" />
    
  4. <body> 元素的底部找到以下几行:

    @*@Scripts.Render("~/bundles/jquery")*@
    @*@Scripts.Render("~/bundles/bootstrap")*@
    
  5. 请将上面的行替换为:

    <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 时,应用程序应成功生成并运行。 祝贺你!

浏览器窗口的屏幕截图,显示了 ASP.NET Core 应用程序的主页。

如果此应用具有更多控制器,则需要对其他控制器重复此过程,直到整个应用已升级。

删除 YARP

现在,所有终结点都已迁移,不再需要反向代理映射到旧项目。

在新应用中,完成以下步骤以删除 YARP:

  1. 在“Program.cs”中,删除调用 builder.Services.AddReverseProxy().LoadFromConfig() 的行。
  2. 在同一文件中,删除行 app.MapReverseProxy();
  3. 在 appsettings.json 中,删除 ReverseProxy 配置对象。

现在可以独立于原始应用生成和部署新应用。

注意

在这种简单方案中,只需一步即可完成现代化。 在许多实际应用程序中,现代化需要更长的时间。 在这种情况下,YARP 代理将保留在原位,因此你能够以增量方式更新应用程序。

总结

本部分已针对简单的特定测试方案完成了升级:默认 ASP.NET MVC 5 应用,无需身份验证、数据访问、其他 NuGet 包或自定义代码。 在更复杂的方案中,你需要完成其他迁移步骤,如 ASP.NET Core 迁移指南中所述。