本文记录的是 ABP 6.x 迁移到 7.0 时的主要变化。由于 ABP 与 .NET 版本持续演进,实际升级项目时,请以当前官方迁移文档为准。

ABP 框架 7.0 新增内容
- 升级到 .NET 7.0
- 升级到 OpenIddict 4.0
- Dapr 集成
- 集成服务
- 动态权限和动态特性
- 外部本地化基础设施
- 分布式实体缓存服务
- Blazor UI 的布局钩子
- eShopOnAbp 项目改进
ABP 框架 6.x 迁移到 7.0 指南
ABP Framework 已升级到 .NET 7.0。如果要使用 ABP 7.0,也需要先将解决方案迁移到 .NET 7.0。
FormTenantResolveContributor 已从 AbpTenantResolveOptions 中移除
FormTenantResolveContributor 已从 AbpTenantResolveOptions 中移除。如果仍需要从 HTTP Request Form 中获取租户信息,请添加自定义的 TenantResolveContributor 来实现。
IHybridServiceScopeFactory 已移除
IHybridServiceScopeFactory 已被移除,请改用 IServiceScopeFactory。
Hybrid JSON 已移除
由于 System.Text.Json 在 .NET 7 中已经支持更多自定义能力,ABP 不再需要 Hybrid JSON 功能。
旧行为
过去,Volo.Abp.Json 包中包含 AbpJsonModule 模块,System.Text.Json 和 Newtonsoft 的序列化/反序列化能力都在这个模块中实现。
默认优先使用 System.Text.Json。对于更多自定义场景,可以通过配置 AbpSystemTextJsonSerializerOptions 的 UnsupportedTypes,交给 Newtonsoft 处理。
新行为
现在,ABP 将 Volo.Abp.Json.SystemTextJson 和 Volo.Abp.Json.Newtonsoft 拆分成了独立包。这意味着项目中只能选择其中一种实现,默认使用 SystemTextJson。如果需要使用 Newtonsoft,还需要在 Web 项目中引用 Volo.Abp.AspNetCore.Mvc.NewtonsoftJson。
- Volo.Abp.Json.Abstractions
- Volo.Abp.Json.Newtonsoft
- Volo.Abp.Json.SystemTextJson
- Volo.Abp.Json (Depends on
Volo.Abp.Json.SystemTextJsonby default to prevent breaking) - Volo.Abp.AspNetCore.Mvc.NewtonsoftJson
现在 AbpJsonOptions 只保留两个属性:
InputDateTimeFormats(List<string>):输入 JSON 日期格式。空字符串表示使用默认格式,也可以提供多个格式用于解析日期。OutputDateTimeFormat(string):输出 JSON 日期格式。null或空字符串表示使用默认格式。
请移除所有 UnsupportedTypes 配置,并通过自定义 Modifiers 控制序列化/反序列化行为。
更多信息请参考文档:https://github.com/abpframework/abp/blob/dev/docs/en/JSON.md#configuration
如何自定义 JSON 契约,请参考:https://learn.microsoft.com/en-us/dotnet/standard/serialization/system-text-json/custom-contracts
“Manage Host Features” 已移动到 Settings 页面
“Manage Host Features” 按钮已从 Tenants 页面移动到 Settings 页面。
更多信息请参阅:https://github.com/abpframework/abp/pull/13359
Auditing 接口中的 setter 已移除
AuditedEntity 以及其他基础实体类仍会保留公共 setter。如果希望将它们改为私有 setter,请不要继承这些基础类,而是自行实现对应接口。
更多信息请参阅:https://github.com/abpframework/abp/issues/12229#issuecomment-1191384798
DbProperties 类增加 Abp 前缀
请同步更新数据库迁移以及相关连接字符串名称。
EntityCreatingEventData、EntityUpdatingEventData、EntityDeletingEventData 和 EntityChangingEventData 已移除
这些类型已经废弃,请不要继续使用。
LayoutHook 相关类已移动命名空间
LayoutHookInfo.cs、LayoutHookViewModel.cs、LayoutHooks.cs、AbpLayoutHookOptions.cs 等类已移动到 Volo.Abp.Ui.LayoutHooks 命名空间下。
更多信息请参阅:https://github.com/abpframework/abp/pull/13903
abp.auth.policies 已移除
abp.auth.polices 已移除,请改用 abp.auth.grantedPolicies。
静态 C# 代理生成
abp generate-proxy -t csharp .. 命令会在客户端生成所有 classes/enums/other types,其中也包括应用服务接口。
如果已经引用了目标 contracts 包,可以传入 --without-contracts 参数,缩写为 -c。
更多信息请参阅:https://github.com/abpframework/abp/issues/13613#issue-1333088953
动态权限
IPermissionDefinitionManager的方法已改为异步方法,并增加Async后缀。- 权限组中移除了
MultiTenancySides。 MultiTenancySides枚举改为继承byte,此前默认是int。- 需要为 Permission Management 模块中的新实体添加迁移。
更多信息请参阅:https://github.com/abpframework/abp/pull/13644
外部本地化基础设施
- 新增
LocalizationResourceBase,作为本地化资源的基类。LocalizationResource继承自它,用于类型化(静态)本地化资源;同时新增NonTypedLocalizationResource,也继承自LocalizationResourceBase,用于动态/外部本地化资源。以前使用LocalizationResource的多数位置现在会改用LocalizationResourceBase,这可能会对部分应用造成破坏性变更。 - 所有 MVC UI 主题的布局都应在 ApplicationConfigurationString 行之前添加下面这一行:
1 | <script src="~/Abp/ApplicationLocalizationScript?cultureName=@CultureInfo.CurrentUICulture.Name"></script> |
ABP 官方主题中已经完成了该修改。
更多信息请参阅:https://github.com/abpframework/abp/pull/13845
BlogPostPublicDto 已替换为 BlogPostCommonDto
- 在 CMS Kit 模块中,
BlogPostPublicDto已从Volo.CmsKit.Public.Application.Contracts移动到Volo.CmsKit.Common.Application.Contracts,并重命名为BlogPostCommonDto。 - 更多信息请参阅 PR#13499。
如果没有使用 CMS Kit 模块,可以忽略这一项。
Devart.Data.Oracle.EFCore
Devart.Data.Oracle.EFCore 包当时尚未支持 EF Core 7.0。如果使用 AbpEntityFrameworkCoreOracleDevartModule(Volo.Abp.EntityFrameworkCore.Oracle.Devart),可能无法按预期工作。ABP 团队会在依赖更新后尽快发布新的包。
更多信息请参阅:https://github.com/abpframework/abp/issues/14412
Angular 应用变更
新增 @abp/ng.oauth 包
OAuth 功能已移动到名为 @abp/ng.oauth 的独立包中,因此需要在 app.module.ts 中添加 @abp/ng.oauth。先将新的 npm 包添加到应用中:
1 | yarn add @abp/ng.oauth |
1 | // app.module.ts |
Lepton X Google Fonts
如果使用带有 Google Fonts 的 LeptonX,相关字体此前内置在 Lepton 文件中,现在已经移动到单独文件。因此需要在 angular.json 中添加 font-bundle,位置为 yourProjectName > architect > build > options > styles。
// for LeptonX Lite
1 | { |
// for LeptonX
1 | { |
侧边菜单布局更新
在侧边菜单布局中,eThemeLeptonXComponents.Navbar 已改为 eThemeLeptonXComponents.Toolbar,eThemeLeptonXComponents.Sidebar 已改为 eThemeLeptonXComponents.Navbar。
此外,还新增了 Logo Component、Language Component 等可替换组件。
如果正在使用可替换组件系统,可以查看文档。
ng-zorro-antd-tree.css
如果使用 AbpTree 组件或 ABP Commercial,需要在 angular.json 中添加 ng-zorro-antd-tree.css。添加位置同样是 yourProjectName > architect > build > options > styles。
{ “input”: “node_modules/ng-zorro-antd/tree/style/index.min.css”, “inject”: false, “bundleName”: “ng-zorro-antd-tree” },