项目

ABP 版本 9.0 迁移指南

本文档是将 ABP v8.x 解决方案升级到 ABP v9.0 的指南。此版本中有一些可能影响您的应用程序的更改,请仔细阅读并应用到您的应用程序中。

ABP 已升级到 .NET 9.0,因此如果您计划使用 ABP 9.0,您需要将您的解决方案迁移到 .NET 9.0。您可以参考 从 ASP.NET Core 8.0 迁移到 9.0 文档以获取指导。

开源版(框架)

升级到 .NET 9.0

我们已经将 ABP 升级到 .NET 9.0,因此如果您想使用 ABP 9.0,您需要将您的解决方案迁移到 .NET 9.0。您可以查看微软的 从 ASP.NET Core 8.0 迁移到 9.0 文档,了解如何将现有的 ASP.NET Core 8.0 项目更新到 ASP.NET Core 9.0。

将您的解决方案更新到 .NET 9.0 后,您应该应用以下步骤:

  • 将您宿主应用程序的模块类中的 app.UseStaticFiles() 更改为 app.MapAbpStaticAssets()
    • 一些 JavaScript/CSS/图像文件存在于虚拟文件系统中,但 ASP.NET Core 9 的 MapStaticAssets 无法处理它们。这就是我们创建 MapAbpStaticAssets 的原因。
  • 将 Microsoft 包(以及其他包)升级到 .NET 9.0 版本。您可以查看 Directory.Packages.props 文件以获取包版本并更新必要的包。

使 IdentitySession 实体可扩展并更新 MaxIpAddressesLength

在此版本中,我们使 IdentitySession 实体可扩展,因此您应该注意下面解释的更改:

  • IdentitySession 实体继承自 AggregateRoot 而不是 BasicAggregateRoot。相关更改的 PR 在这里:#20771
  • IdentitySession 实体的 MaxIpAddress 属性现在允许最多 2048 个字符。您可以在此处查看相关的 PR:这里

针对上述更改,您应该创建一个新的数据库迁移并将其应用到您的数据库中。

OpenIddictAuthorizationOpenIddictToken 实体中移除审计属性

在此版本中,我们从 OpenIddictAuthorizationOpenIddictToken 实体中移除了审计属性。现在,这些实体继承自 AggregateRoot 而不是 FullAuditedAggregateRoot

如果需要更多信息,请参见 PR:https://github.com/abpframework/abp/pull/20671

由于审计属性已被移除,您应该创建一个新的数据库迁移并将其应用到您的数据库中。

更新了 AbpCrudPageBase 的方法签名

framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs 的方法签名已更改如下:

- IEnumerable<TableColumn> GetExtensionTableColumns(string moduleName, string entityType)
+ Task<List<TableColumn>> GetExtensionTableColumnsAsync(string moduleName, string entityType)

从开源模板中移除了 React Native 移动端选项

在此版本中,出于维护原因,我们从开源模板中移除了 React Native 移动端选项。我们为此更改更新了相关文档和 ABP CLI(包括新旧 CLI),从 v9.0 开始,您将无法创建以 react-native 作为移动端选项的免费模板。

注意: 专业版模板仍提供 React Native 作为移动端选项,并且我们将继续支持它。

如果您想访问开源的 React-Native 模板,可以访问 abp-archive 仓库:https://github.com/abpframework/abp-archive

专业版(PRO)

在阅读本节之前,请检查**开源版(框架)**部分。列出的主题可能会影响您的应用程序,您可能需要处理它们。

如果您是付费许可证所有者并且正在使用 ABP 的付费版本,请遵循以下部分以了解破坏性更改并应用必要的更改:

ABP Suite:为多个导航属性提供更好的命名

注意: 作为开发者,您无需针对此更改在您的解决方案中进行任何修改。我们只是想强调此更改并让您知晓。

在此版本之前,当您定义多个(相同的)指向同一实体的导航属性时,ABP Suite 会使用重复编号对它们进行重命名。

考虑以下示例场景:如果您有一本书具有作者和合著者,在此版本之前,ABP Suite 会创建一个 DTO 类,如下所示:

public class BookWithNavigationPropertiesDto
{
    public BookDto Book { get; set; }

    public AuthorDto Author { get; set; }

    public AuthorDto Author1 { get; set; }
}

请注意,由于 book 实体有两个相同的导航属性,ABP Suite 使用重复编号对它们进行了重命名。在此版本中,ABP Suite 将要求您为导航属性定义一个属性名称,您将能够指定一个有意义的名称,例如:

public class BookWithNavigationPropertiesDto
{
    public BookDto Book { get; set; }

    public AuthorDto Author { get; set; }

    //使用了指定的属性名称
    public AuthorDto CoAuthor { get; set; }
}

CMS Kit Pro:反馈功能改进

在此版本中,我们修订了 CMS Kit 的反馈功能,因此我们进行了以下更改:

  • CmsKitProSettingGroupViewComponent 不再注入任何服务,并且该组件的设计已更新。(如果您没有覆盖该组件,则无需更改代码)
  • Default.cshtmlDefault.js 文件(位于 Pages/Public/Shared/Components/PageFeedbacks/ 目录下)已更新。(如果您没有覆盖这些文件,则无需更改代码)
  • FeedbackUserId 属性已添加到 PageFeedback 实体中,这意味着您应该创建一个新的数据库迁移并将其应用到您的数据库。
  • PageFeedbackManager.CreateAsync 方法现在需要一个额外的参数:Guid feedbackUserId。(如果您没有覆盖或使用此文件,则无需更改代码)
  • PageFeedbackPublicAppService 已更新,以保存反馈用户 ID。(如果您没有覆盖或使用此文件,则无需更改代码)
在本文档中