ABP Framework 手動升級指南:從6.0.1升級到7.0.0

2023-01-12 12:00:15

ABP 7.0.0 正式版已經發布,ABP-Framework-All-In-One 專案同步升級。

LeptonX Lite Theme 目前還沒有包含在原始碼解決方案中,還是以 Nuget 包提供,目前已經更新到 2.0.0

ABP 7.0.0 最大的變化是提供 OpenIddict 應用模組,用於替換 IdentityServer 應用模組。IdentityServer 功能強大,經過多個版本迭代,在 ABP Framework 中也足夠穩定,只要官方繼續維護該應用模組,可以不用著急切換到 OpenIddcit 。

本文記錄從 6.0.1 升級到 7.0.0 的詳細過程及注意事項。

第一步:更新 ABP Framework 原始碼

下載最新版 ABP Framework 原始碼 7.0.0 到解決方案根目錄,將原 abp 目錄打包備份,刪除該目錄,然後將 abp-7.0.0 並解壓重新命名為 abp ,實現框架原始碼更新到最新。

第二步:更新 .NET 版本

該版本是跟隨 .NET 7 釋出之後的升級版,所以 .NET 需要升級到 7 。如果是 Dcoker 部署,需要升級映象中採用的 SDK 版本。

檢視已安裝的 .NET 版本,在終端執行命令 dotnet --list-sdks

6.0.400 [/usr/local/share/dotnet/sdk]
7.0.100 [/usr/local/share/dotnet/sdk]

修改解決方案中 global.json 檔案

{
  "sdk": {
    "version": "7.0.100"
  }
}

升級專案目標框架

專案目標框架 TargetFramework 如果為 netstandard2.0 ,不需要升級目標框架,與 .NET 7 相容。

目標框架為 net6.0 ,都必須升級到 net7.0

找到應用程式專案檔案 .csproj 修改:

- <TargetFramework>net6.0</TargetFramework>
+ <TargetFramework>net7.0</TargetFramework>

src 目錄中包含 11 個專案,test目錄中包含 5 個專案,逐一檢查修改。

升級程式集版本

解決方案中還有部分專案(srctest 目錄中的專案)中的程式集直接基於 Nuget 包參照,所參照的程式集版本應該與 ABP Framework原始碼專案(abp 目錄中的專案)保持版本一致。

src 目錄專案程式集版本升級列表:

  • Serilog.AspNetCore 4.1.0 -> 5.0.0

  • Serilog.Sinks.Async 1.4.0 -> 1.5.0

  • Microsoft.AspNetCore.Authentication.JwtBearer 5.0.* -> 7.0.0

  • Microsoft.AspNetCore.DataProtection.StackExchangeRedis 5.0.* -> 7.0.0

  • Volo.Abp.AspNetCore.Mvc.UI.Theme.LeptonXLite 1.0.0-beta.3 -> 2.0.0-*

  • Microsoft.EntityFrameworkCore.Tools 5.0.12 -> 7.0.1

  • Microsoft.Extensions.FileProviders.Embedded 6.0.5 -> 7.0.0

  • Volo.Abp.AspNetCore.Mvc.UI.Theme.LeptonXLite 1.0.0-beta.3 -> 2.0.0

  • Serilog.Extensions.Logging 3.0.1 -> 3.1.0

  • Serilog.Sinks.Async 1.4.0 -> 1.5.0

  • Serilog.Sinks.File 4.1.0 -> 5.0.0

  • Serilog.Sinks.Console 3.1.1 -> 4.1.0

test 目錄測試專案程式集版本升級類表:

  • Microsoft.NET.Test.Sdk 16.9.1 -> 17.2.0
  • Microsoft.Extensions.Hosting 5.0.* -> 7.0.0
  • Microsoft.Extensions.Http.Polly 5.0.* -> 7.0.0
  • NSubstitute 4.2.2 -> 4.3.0
  • Shouldly 4.0.3 無需升級
  • xunit 2.4.1 無需升級
  • xunit.extensibility.execution 2.4.1 無需升級
  • xunit.runner.visualstudio 2.4.3 -> 2.4.5

第三步:編譯解決方案

執行 dotnet build 編譯整個解決方案,編譯成功。如果存在警告或錯誤,檢查程式集版本是否設定正確。

第四步:更新資料庫結構

升級 dotnet-ef 工具

dotnet tool update --global dotnet-ef

工具 dotnet-ef 升級到當前最新版本 7.0.1

執行命令生成資料遷移指令碼:

cd 'src/AbpClub.EntityFrameworkCore'
dotnet ef migrations add UpdateSeven

需要在資料庫中新增四張表:

  • AbpFeatureGroups 功能組表
  • AbpFeatures 功能表
  • AbpPermissionGroups 許可權組表
  • AbpPermissions 許可權表

這四張表用於功能和許可權的持久化,以支援動態功能和動態許可權。

CmsPages 表中新增列 IsHomePage ,標識是否是主頁

詳細的資料庫結構的改動,可以檢視 AbpClub.EntityFrameworkCore 專案中 Migrations 目錄下的 xxxxx_UpdateSeven 類。

接下來,執行 dotnet ef database update 將資料遷移指令碼更新到資料庫。

第五步:升級前端包

AbpClub.Web 專案中找到包組態檔 packages.json,將@abp為字首的所有NPM包升級到最新版本號。

原版本:

{
  "version": "1.0.0",
  "name": "abpclub",
  "private": true,
  "dependencies": {
    "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~1.0.0",
    "@abp/cms-kit": "6.0.1",
    "@abp/docs": "6.0.1",
    "@abp/jstree": "6.0.1",
    "@abp/tui-editor": "6.0.1",
    "@abp/uppy": "6.0.1",
    "@abp/virtual-file-explorer": "6.0.1",
    "slugify": "1.6.5",
    "tui-code-snippet": "2.3.3"
  }
}

升級為:

{
  "version": "1.0.0",
  "name": "abpclub",
  "private": true,
  "dependencies": {
    "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~2.0.0",
    "@abp/cms-kit": "7.0.0",
    "@abp/docs": "7.0.0",
    "@abp/jstree": "7.0.0",
    "@abp/tui-editor": "7.0.0",
    "@abp/uppy": "7.0.0",
    "@abp/virtual-file-explorer": "7.0.0",
    "slugify": "1.6.5",
    "tui-code-snippet": "2.3.3"
  }
}

slugifytui-code-snippet 沒有新版本,無需升級。

終端工具導航到 Web 專案所在目錄,然後執行 abp install-libs 更新包參照。

除了 Web 專案,別忘記將 IdentityServer 專案按照同樣的方式進行升級。

{
  "version": "1.0.0",
  "name": "my-app-identityserver",
  "private": true,
  "dependencies": {
    "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~2.0.0"
  }
}

第六步:功能測試

分別啟動 IdentityServer HttpApi.Host 以及 Web 專案,測試應用中的功能是否都正常。

6.0.1 版本中存在的問題,在當前版本中已經修復:存取CMS選單下除評論外的其他6個頁面已經不會丟擲異常。

  • 部落格:https://localhost:44397/Cms/Blogs
  • 部落格貼文:https://localhost:44397/Cms/BlogPosts
  • 選單:https://localhost:44397/Cms/Menus/Items
  • 頁面:https://localhost:44397/Cms/Pages
  • 標籤:https://localhost:44397/Cms/Tags

檢視原始碼,已經在 /Themes/LeptonXLite/Layouts/Application.cshtml 頁面中修復了該Bug,設定 content_toolbar Section 為非必要渲染。

修復方式:

@await RenderSectionAsync("content_toolbar", false)

升級成功!目前的感受是,版本的穩定性進一步增強了。


本文已收錄到《ABP Framework 極速開發》