如何将ASP .NET Core 3.1网络应用程序迁移至ASP .NET Core 6

177 阅读7分钟

将ASP .NET Core 3.1网络应用程序迁移至ASP .NET Core 6

.NET 6是使用.NET技术堆栈构建的解决方案的发展方向。探索将ASP .NET Core 3.1迁移到ASP .NET Core 6的分步方法。

.NET 6统一了未来的.NET平台。它还沿途引入了大量令人兴奋的新功能。它实现了微软的一个.NET愿景,同时也为现有的.NET开发者开辟了新的视野。改进的性能、C# 10功能和热重载只是你想过渡到.NET 6和ASP .NET Core 6的几个原因。

你可以查看官方的ASP.NET Core 6.0文档,了解更多关于ASP .NET Core 6中的新内容。

我们在这篇文章中的重点是看到从ASP .NET Core 3迁移到ASP .NET 6的简单过程。在以后的文章中,我将介绍.NET 6的新功能。

示例应用程序

我将使用一个现有的Web应用程序,它是用ASP .NET Core 3.1开发的。它有一个非常普通的网络应用程序结构,是围绕会计领域编写的。它有典型的UI(Angular)和API(ASP .NET Core 3.1),并使用Postgres作为数据层。

下面是该解决方案在Visual Studio中的样子。

这个应用程序的源代码可以在这个Git repo( 分支)上找到。你也可以查看已部署的应用程序

这个应用也使用了AWS无服务器模板(它可以作为AWS上的无服务器Lambda函数部署)。如果你没有使用AWS Serverless,你可以直接忽略这个细节。

你可以使用你自己的应用程序代码,原理也是一样的。

在这篇文章中,我们将把解决方案的后端升级到.NET 6。

迁移步骤

以下是我们在迁移过程中要采取的步骤:

  • 安装Visual Studio 2022(这也是安装/升级SDK)。
  • 在我们的解决方案中升级TargetFramework。
  • 更新NuGet包。
  • 构建和测试。

在接下来的章节中,我们将看到所有这些步骤,将我们的解决方案迁移到.NET 6。

安装.NET 6

你可以下载并安装独立的.NET SDK,或者你可以直接下载并安装Visual Studio 2022,它将自动安装.NET 6作为其安装的一部分。另外,在安装过程中选择Web工作负载

一旦Visual Studio安装完毕,你可以使用以下命令了解一些细节。

我还安装了AWS Toolkit for Visual Studio。同样,如果不使用AWS for .NET,你可以跳过这个。

在Visual Studio中打开.NET核心解决方案

一旦Visual Studio 2022安装完成,.NET 6也安装完毕,我在Visual Studio 2022中打开了ASP .NET Core 3解决方案,遇到了以下通知。点击安装,它将安装所需的组件。

正如你所看到的,该解决方案包含不同的项目,为不同的应用关注点分层排列:

  • AccountingBook.Core (标准库,领域模型)
  • AccountingBook.Data (标准库,实体框架数据层)
  • AccountingBook.Web (ASP .NET Core 3.1网络API)

我不会去讨论应用程序代码的细节,但如果你对应用程序的构建方式感兴趣,可以在书中找到详细的"使用.NET Core、Angular和Entity-Framework构建会计应用程序."

现在,如果我们愿意,我们可以运行我们的应用程序,下面的图片显示,它正在按照预期工作。

接下来,我们将把解决方案中的所有项目逐一迁移到.NET 6。

迁移AccountingBook.Core项目(标准库)

让我们从AccountingBook.Core项目开始,因为它对其他项目没有依赖性,所以它是最简单的迁移项目。

打开这个项目的**.csproj**文件,按如下方式修改。

这就是我们需要做的迁移库项目的全部工作。我们可以通过在Visual Studio中构建这个项目进行测试。

迁移AccountingBook.Data项目(标准库)

这也是一个标准库项目,但它引用了AccountingBook.Core项目(我们已经迁移到net6.0),而且它也有一些NuGet包,包括Entity Framework Core

在同一过程中,让我们在visual studio中打开这个项目的**.csproj**文件。

因此,我们需要将TargetFramework 更新为**net6.0,**我们可以简单地通过直接编辑该文件来完成,就像我们在前一个项目中所做的那样。

然而,为了更新NuGet包,我喜欢使用Visual Studio的项目包管理器窗口,因为它提供了更多细节。下图显示了正在更新的包。

有了这些变化(TargetFramework和NuGet包更新),这个项目的迁移就完成了。我们可以在Visual Studio中构建这个项目来测试。

下面是更新后的.csproj文件的样子。

迁移AccountingBook.Web项目(Web API)

这个项目同时引用了AccountingBook.Core和AccoutingBook.Web项目,以及它自己的包。然而,这个过程与我们在前几节所做的几乎是一样的。

这里是Web项目的.csproj文件。

按照同样的过程,我们将首先把TargetFramework 升级到net6.0,然后使用package-manager窗口来更新包

下面是更新后的.csproj文件的样子。

现在我们可以构建并运行解决方案,以检查它在升级后是否按预期工作。

将AWS Serverless Lambda迁移至.NET 6运行时

如果你不使用AWS Serverless Lambda,你可以跳过这一部分。

AWS在这篇 AWS Compute Blog文章中介绍了.NET 6的升级细节以及迁移所需的步骤,如图所示。以下是我们将.NET Lambda函数迁移到.NET 6运行时所需要做的事情:

  1. 打开 aws-lambda-tools-defaults.json 文件,如果它存在的话。
    1. 将函数运行时间字段设置为dotnet6
    2. 将框架字段设置为net6.0。如果你删除该字段,其值将从项目文件中推断出来。
  2. 如果它存在,请打开serverless.template文件。对于任何AWS::Lambda::Function或AWS::Servereless::Function资源,将Runtime属性设置为dotnet6

aws-lambda-tools-defaults.json文件

完成这些修改后,我们就可以在本地构建项目,经过验证后,就可以使用AWS Serverless Lambda部署解决方案。

部署后,我们可以从AWS网络控制台看到,Lambda函数也被更新为.NET6运行时。

此外,在这里我们可以看到,迁移后的应用程序已经开始运行。

迁移说明

你可能已经注意到,在解决方案的迁移过程中,我没有改变任何应用的代码,仍然能够轻松地迁移解决方案。这是由于.NET 6中的大多数结构性改变是可选的,所以你可以在以后逐一决定你想改变的领域。

即使不做任何结构上的改变,我们迁移的应用程序仍然会从平台的升级中受益,比如在性能上。

总结

对于使用.NET技术栈构建的解决方案来说,.NET 6是未来的方向。在这篇文章中,我们看到将ASP .NET Core 3.1 Web API项目迁移到较新的.NET版本是一个简单的过程,它不需要我们对我们的应用程序做很多改变。

我们还看到,通过简单的修改,AWS无服务器Lambda也很容易升级到.NET6运行时。

即使不对我们的应用程序做任何代码修改,更新后的解决方案也会有性能上的优势,以后随着我们的进展,我们可以用框架提供的新变化重构我们应用程序的不同区域。

你可以从本文前面链接的Git仓库的dotnet6分支中下载更新的应用代码。

如果你有一些意见或问题,请告诉我。直到下一次,编码愉快。