自学内容网 自学内容网

Web API 从 .NET 6.0 迁移到 .NET 8.0及Azure DevOps持续集成期间出错并解决

2023 年 11 月发布的 .NET 8 是许多开发人员期盼已久的时刻。为了保持技术领先地位,我决定将我的 Web API 从 .NET 6 迁移到这个最新版本。

本次回顾的目的是分享整个迁移过程中采取的步骤、遇到的挑战以及获得的经验教训。

先决条件:最新的 Visual Studio 环境

我首先更新了我的开发环境(Visual Studio 2022),以确保与最新的 .NET 8 功能实现最佳兼容性。

迁移前:确保 .NET 6 应用程序是最新的

在迁移到 .NET 8 之前,至关重要的第一步是确保您的应用程序在当前框架中是最新的。这意味着更新您的依赖项并使其兼容。

采取这一预防措施有两个主要目的:

  • 纠正现有的不兼容性
  • 限制潜在的迁移后错误

在受控环境中纠正不兼容性

通过查看和更新​​ .NET 6 项目的 NuGet 包,您将有机会在受控环境中修复当前的不兼容性。这涉及识别和解决已弃用或过时的方法,这些方法可能会被删除,并在迁移到 .NET 8 时产生问题。

减少迁移后错误

通过在 .NET 6 项目中保持 NuGet 包为最新,您可以降低迁移后出现错误的风险。提前更新意味着您可以避免与 Framework 版本更改无直接关系的潜在冲突或兼容性问题。这使得迁移过程更加顺畅,并且不容易出错。

通过遵循此初步步骤,您可以为迁移到 .NET 8 创建一个稳定、准备好的基础,最大限度地减少潜在的复杂性并确保更顺利地过渡到新的框架版本。

使用内部框架

如果您有自己的框架,最好对其进行相同的检查以确保它也是最新的,即使您自己的软件包在没有修改的情况下也基本兼容。

它们应该迁移到提供 .NET 8 版本(如果您选择使用与 Microsoft 相同的编号,则为版本 8.0.0)。

查看 .NET 8 中的重大变更

尽管 .NET 8 Framework 继承了 .NET 7 的风格,但它仍然有一些重大变化。

要识别它们,您应该阅读 Microsoft 提供的官方 .NET 8 兼容性文档:.NET 8 中的重大变化

如果您提前了解这些变化,您可以预测成功迁移到 .NET 8 所需的调整,并通过在迁移后特别关注它们来维护应用程序的稳定性。

更改目标框架

我通过调整解决方案中每个项目的属性中的目标框架开始迁移到.NET 8:

一旦目标框架被修改,专门针对 .NET 6 版本的 NuGet 包必须更新,以使其与新框架兼容。

这主要适用于 Microsoft NuGet 包,其主版本对应于目标框架。

版本目标框架
版本 6.XX.NET 6
版本 8.XX.NET 8

开发和测试

除了一些特定于您业务环境的错误之外,通过提前准备并对项目和依赖项进行这些调整,您将很快获得一个可以在本地编译和运行的版本。

然后,您可以运行单元测试并通过手动功能测试检查一切是否顺利运行。

根据您的情况,如果您使用像 Entity Framework 这样的对象关系映射器,您应该对创建迁移和修改数据库进行测试:

添加迁移-名称测试-项目 Projet.Data
更新数据库

与 Azure DevOps 持续集成期间出错 

一旦解决方案在本地完全发挥作用,很自然地就会想要通过持续集成将更改上传到 Azure DevOps。

但是,在编译时,服务器返回错误,因为它当前无法编译 .NET 8。要解决此问题,您需要更新 SDK:

.NET Downloads (Linux, macOS, and Windows)

##[错误] nuget 命令失败,退出代码为(1)且出现错误(C:\Program Files\dotnet\sdk\7.0.403\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.TargetFrameworkInference.targets(160,5): 错误 NETSDK1045: 当前 .NET SDK 不支持定位 .NET 8.0。请定位 .NET 7.0 或更低版本,或者使用支持 .NET 8.0 的 .NET SDK 版本。从 https://aka.ms/dotnet/download 下载 .NET SDK  [ D:\a\1\s\XXX\YYY.csproj])

##[错误]包恢复失败

Azure 应用服务上的问题管理

对我来说,持续部署很顺利。但是,当我尝试使用该应用程序时,它却无法运行,Azure 应用服务向我提供了“HTTP 错误 500.31”错误页面: 

此错误消息表明应用服务对 .NET 版本 8 的支持存在问题。

在应用服务控制台上,我使用“dotnet-info”命令来查找安装了哪个版本。

要更新配置,我转到“配置”选项卡,然后转到“常规设置”,在那里我可以更改使用的.NET 版本:

通过 Terraform 进行修改

还可以在 Terraform 配置中更改 Stack 和 .NET 版本。对于“azurerm_windows_web_app”资源,可以通过指定所需版本的“dotnet” Stack 来完成: v8.0。 

site_config {
    application_stack {
      current_stack  = "dotnet"
      dotnet_version = "v8.0"
    }
}

您需要了解的所有内容都在 Terraform 的文档中:管理 Windows Web 应用程序 

.NET 8 中的新功能 

迁移成功完成后,我就可以探索 .NET 8 的新功能了。我对主构造函数的使用印象特别深刻,这个功能可以提高代码的可读性。 

您可以在 Microsoft 的官方文档中找到 .NET 8 新功能的完整列表:.NET 8 中的新功能

要点:一次具有指导意义的迁移 

总之,将 Web API 从 .NET 6 迁移到 .NET 8 是一种学习体验。通过将 Microsoft 的官方文档与 .NET 社区的资源相结合,我能够成功完成迁移步骤。主动问题管理定期更新是此次过渡成功的关键,为更现代、更高性能的开发环境打开了大门。


原文地址:https://blog.csdn.net/hefeng_aspnet/article/details/143569625

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!