将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运行时所需要做的事情:
- 打开 aws-lambda-tools-defaults.json 文件,如果它存在的话。
- 将函数运行时间字段设置为dotnet6。
- 将框架字段设置为net6.0。如果你删除该字段,其值将从项目文件中推断出来。
- 如果它存在,请打开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分支中下载更新的应用代码。
如果你有一些意见或问题,请告诉我。直到下一次,编码愉快。