18 ABP Framework 模块管理

ABP Framework 模块管理

概述

该页面详细介绍了在 ABP Framework 解决方案中使用 ABP CLI 及相关工具添加、更新和管理模块的方法。模块管理是 ABP 模块化架构的核心,支持可重用业务和基础设施功能的集成。模块通常以 NuGet 和/或 NPM 包的形式分发,有时也以源代码形式提供。

ABP CLI 模块管理命令

命令 描述
abp add-module 向解决方案添加多包模块
abp update 更新模块和 ABP 包版本
abp list-modules 列出可用的官方 ABP 模块

模块添加流程

模块添加由 SolutionModuleAdder 类和 abp add-module 命令协调完成,流程如下:
Yes No Yes No abp add-module (AddModuleCommand.ExecuteAsync) SolutionModuleAdder.GetModuleInfoAsync SolutionModuleAdder.RemoveIncompatiblePackages ProjectFinder.GetProjectFiles SolutionModuleAdder.AddNugetAndNpmReferences withSourceCode? SolutionModuleAdder.DownloadSourceCodesToSolutionFolder SolutionModuleAdder.AddAngularPackages SolutionModuleAdder.RemoveUnnecessaryProjectsAsync addSourceCodeToSolutionFile? SolutionFileModifier.AddModuleToSolutionFileAsync NugetPackageToLocalReferenceConverter.Convert SolutionModuleAdder.AddAngularSourceCode SolutionModuleAdder.RunBundleForBlazorAsync SolutionModuleAdder.ModifyDocContent Module added

abp add-module 命令

  • 语法abp add-module <module-name> [options]

  • 关键选项

    • --new:创建专用于解决方案的新模块
    • --with-source-code:下载模块源代码到解决方案
    • --add-to-solution-file:将下载的模块添加到解决方案文件
    • -s, --solution:明确指定解决方案文件
    • --skip-db-migrations:跳过数据库迁移创建
    • -v, --version:指定模块版本(默认为项目的 ABP 版本)
  • 示例

    复制代码
    abp add-module Volo.Blogging                       # 向当前解决方案添加 Blogging 模块
    abp add-module Volo.Blogging -s Acme.BookStore     # 向指定解决方案添加模块
    abp add-module ProductManagement --new             # 创建名为 ProductManagement 的新模块

模块结构与目标项目解析

添加模块时,ABP 基于 NuGetPackageTarget 和项目命名约定确定解决方案中哪些项目应接收每个包:
NugetPackageInfo.Target=Application *.Application.csproj NugetPackageInfo.Target=ApplicationContracts *.Application.Contracts.csproj NugetPackageInfo.Target=Domain *.Domain.csproj NugetPackageInfo.Target=DomainShared *.Domain.Shared.csproj NugetPackageInfo.Target=HttpApi *.HttpApi.csproj NugetPackageInfo.Target=HttpApiClient *.HttpApi.Client.csproj NugetPackageInfo.Target=EntityFrameworkCore *.EntityFrameworkCore.csproj NugetPackageInfo.Target=MongoDB *.MongoDB.csproj NugetPackageInfo.Target=Blazor *.Blazor.csproj NugetPackageInfo.Target=Web *.Web.csproj

目标解析逻辑

ProjectFinder.FindNuGetTargetProjectFile 方法用于解析哪个项目接收每个包:
Yes No NugetPackageInfo.Target ProjectFinder.FindNuGetTargetProjectFile Project file exists? Add package reference Skip package

例如,目标为 EntityFrameworkCore 的包会映射到以 .EntityFrameworkCore.csproj 结尾的项目。

添加带源代码的模块

使用 --with-source-code--new 选项时,模块源代码会下载到 /modules 文件夹并设置项目引用:
Yes No abp add-module --with-source-code SolutionModuleAdder.DownloadSourceCodesToSolutionFolder SolutionModuleAdder.RemoveUnnecessaryProjectsAsync NugetPackageToLocalReferenceConverter.Convert addSourceCodeToSolutionFile? SolutionFileModifier.AddModuleToSolutionFileAsync End

此方法推荐用于:

  • 自定义或扩展模块代码
  • 调试模块内部
  • 审查模块实现

数据库集成

如果添加的模块包含实体,ABP 会:

  • 定位应用程序的 DbContext
  • DbContext 添加模块的配置方法
  • 创建新的 EF Core 迁移(除非跳过)
  • 运行迁移程序项目(如果可用)

No Yes Yes No Module added module.EfCoreConfigureMethodName exists? End DerivedClassFinder.Find(dbMigrationsProject, 'AbpDbContext') DbContextFileBuilderConfigureAdder.Add skipDbMigrations? EfCoreMigrationManager.AddMigration SolutionModuleAdder.RunMigrator

创建数据库迁移

模块添加器将:

  1. 在应用程序中找到 DbContext
  2. 使用模块的 Configure{ModuleName} 方法添加必要的实体配置
  3. 创建名为 Added_{ModuleName}_Module 的新迁移
  4. 运行迁移程序(如果可用)

客户端集成

模块可能包含用于 Angular、Blazor 或 MVC 的客户端包,模块添加器会自动集成它们:
Found Not found Found Not found Detect Angular NPM packages ProjectNpmPackageAdder.AddNpmPackageAsync Skip SolutionModuleAdder.TryConfigureModuleConfigurationsForAngular Detect Blazor NuGet packages ProjectNugetPackageAdder.AddAsync Skip SolutionModuleAdder.RunBundleForBlazorAsync

Angular 集成

包括:

  • 安装 NPM 包(ProjectNpmPackageAdder.AddNpmPackageAsync
  • 修改 app.module.tsapp-routing.module.ts 以注册模块(SolutionModuleAdder.TryConfigureModuleConfigurationsForAngular
  • 按需添加源代码

Blazor 集成

包括:

  • 将 NuGet 包添加到 Blazor 项目
  • 运行捆绑命令生成静态资源(SolutionModuleAdder.RunBundleForBlazorAsync

更新模块

要更新解决方案中所有与 ABP 相关的 NuGet 和 NPM 包,请使用:

复制代码
abp update

更新流程

abp update (UpdateCommand.ExecuteAsync) Find .sln files For each solution VoloNugetPackagesVersionUpdater.UpdateSolutionAsync NpmPackagesUpdater.Update Done

选项

选项 描述
--npm 仅更新 NPM 包
--nuget 仅更新 NuGet 包
--check-all 单独检查每个包版本
-v, --version 更新到特定版本
相关推荐
CodeCraft Studio1 小时前
Aspose.Words for .NET 25.7:支持自建大语言模型(LLM),实现更安全灵活的AI文档处理功能
人工智能·ai·语言模型·llm·.net·智能文档处理·aspose.word
要记得喝水2 小时前
C#某公司面试题(含题目和解析)--1
开发语言·windows·面试·c#·.net
SEO-狼术2 小时前
Aqua Data Studio 25.5
.net
MasterNeverDown21 小时前
.net 微服务jeager链路跟踪
微服务·架构·.net
喵叔哟1 天前
51.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--新增功能--登录注册扩展
数据库·微服务·.net
时光追逐者1 天前
.NET 使用 CsvHelper 快速读取和写入 CSV 文件
c#·.net·.net core·csv
界面开发小八哥2 天前
文档控件DevExpress Office File API v25.1新本亮点:重磅升级各类API
c#·.net·界面控件·devexpress·ui开发
追逐时光者2 天前
.NET 使用 CsvHelper 快速读取和写入 CSV 文件
后端·.net
Kookoos2 天前
差分隐私在运营指标:ABP 的 DP 计数器与噪声预算
.net·差分隐私·abp vnext·拉普拉斯机制·隐私预算
蒋星熠3 天前
.NET技术深度解析:现代企业级开发指南
人工智能·python·深度学习·微服务·ai·性能优化·.net