项目

ABP Studio:解决方案资源管理器

ABP Studio 包含了各种概念,我们在解决方案资源管理器中使用了它们。为确保清晰度,请先查阅概念文档。您可以在 ABP Studio 左侧看到解决方案资源管理器。它显示您解决方案的概览,您可以使用解决方案资源管理器来管理项目。只需在左侧菜单中导航至解决方案资源管理器面板。

solution-explorer

解决方案资源管理器的结构可能因您的选择而异。例如,MVC 微服务项目看起来如下所示。您可以从解决方案资源管理器编辑模块、包和文件夹。

解决方案

这是您可以用 ABP Studio 打开的主解决方案,一个 ABP 解决方案可以包含多个模块。您可以使用欢迎页面上的新建解决方案按钮创建一个新的 ABP 解决方案。您也可以使用欢迎页面上的打开解决方案按钮打开一个现有的 ABP 解决方案。您可以使用解决方案根节点编辑模块文件夹。有 4 个预构建的解决方案模板:应用程序(单层)应用程序(分层)微服务。这些解决方案模板使用插件系统,如果需要,您可以创建自定义解决方案模板。此外,解决方案资源管理器允许您按文件夹模块导入进行筛选。我们可以使用向上箭头图标折叠整个树。当您右键单击解决方案根节点时,会打开上下文菜单,您可以看到以下选项:

abp-solution

  • 添加:您可以将以下选项添加到您的解决方案:
    • 新建文件夹:在 ABP 解决方案内创建一个新文件夹,方便您组织模块。
    • 新建模块:允许您创建一个新模块。
    • 现有模块:您可以将现有模块添加到您的解决方案。
  • 重命名:重命名解决方案。
  • 管理密钥:您可以编辑解决方案密钥。
  • 管理元数据:您可以编辑解决方案元数据。
  • 重新加载:重新加载解决方案。
  • ABP Suite:打开选择模块窗口,您可以选择一个模块或不选择模块继续。如果选择模块,将在 ABP Suite 中打开该模块。如果不选择模块继续,将在没有模块的情况下打开 ABP Suite。
  • ABP CLI
    • 安装库:为解决方案中的 UI 项目安装 NPM 包。
    • 升级 ABP 包:更新解决方案中所有与 ABP 相关的 NuGet 和 NPM 包。
    • 清理:删除解决方案中所有 BINOBJ 文件夹。
    • 切换到:将您的解决方案切换到选定的 ABP 版本。
      • 稳定版:将您的解决方案切换到最新的稳定版本。
      • 预览版:将您的解决方案切换到预览版本。
      • 夜间构建版:将您的解决方案切换到夜间版本。
  • Dotnet CLI
    • 生成:生成每个模块。
    • 图形生成:使用图形生成选项生成每个模块。
    • 清理:清理模块先前构建的输出。
    • 还原:还原模块的依赖项。
  • 打开方式
    • 终端:在解决方案目录中打开终端。
    • 资源管理器:在解决方案目录中打开文件资源管理器。
  • 解决方案配置:您可以在本菜单中查看项目创建选项。它打开解决方案配置窗口。
  • 打开自述文件:如果存在,打开解决方案中的 README 文件。如果没有 README 文件,此选项将不可见。

文件夹

当直接将模块添加到解决方案根节点时,可能会变得杂乱无章,尤其是在模块数量众多时。利用文件夹结构可以让我们更有效地组织模块。此方法允许在指定文件夹内执行集体命令。您可以使用解决方案根节点上下文菜单上的添加 -> 新建文件夹按钮创建新文件夹,它将打开新建文件夹窗口。您还可以使用解决方案资源管理器重命名、删除和移动文件夹。

new-folder

  • 文件夹名称:给出我们希望在解决方案资源管理器中看到的文件夹名称。我们可以使用 / 字符创建嵌套文件夹。这是一个解决方案资源管理器文件夹,因此它不会创建真实的文件夹。确保每个文件夹名称是唯一的。

您可以点击确定按钮将文件夹添加到解决方案。当您右键单击解决方案文件夹时,会打开上下文菜单,您可以看到以下选项:

folder-context-menu

  • 添加:您可以将以下选项添加到您的解决方案文件夹:
    • 新建文件夹:在选定的文件夹内创建一个新的嵌套文件夹,方便您组织模块。
    • 新建模块:允许您在选定的文件夹中创建一个新模块。
    • 现有模块:您可以将现有模块添加到您选定的文件夹。
  • 重命名:重命名选定的文件夹。
  • 删除:从解决方案中删除选定的文件夹及其所有子项。
  • ABP CLI
    • 安装库:为选定文件夹中的 UI 项目安装 NPM 包。
    • 升级 ABP 包:更新选定文件夹中所有与 ABP 相关的 NuGet 和 NPM 包。
    • 切换到:将您选定的文件夹切换到指定的 ABP 版本。
      • 稳定版:将您选定的文件夹切换到最新的稳定版本。
      • 预览版:将您选定的文件夹切换到预览版本。
      • 夜间构建版:将您选定的文件夹切换到夜间版本。
    • 清理:删除选定文件夹中所有 BINOBJ 文件夹。
  • Dotnet CLI
    • 生成:生成选定文件夹中的每个模块。
    • 图形生成:使用图形生成选项生成选定文件夹中的每个模块。
    • 清理:清理选定文件夹中模块先前构建的输出。
    • 还原:还原选定文件夹中模块的依赖项。

您可以将文件夹、模块和包(在同一模块内)拖放到文件夹中以进行组织。点击并按住一个项目,然后将其拖到所需的文件夹中。

模块

一个模块是一个子解决方案,可以包含零个、一个或多个。每个模块都被视为一个 .NET 解决方案。我们可以创建或导入一个现有模块到解决方案中,每个模块只能添加一次。当您右键单击模块时,会打开上下文菜单,您可以看到以下选项:

module-context-menu

  • 添加:您可以将以下选项添加到您的模块:
      • 新建包:在选定的模块内创建一个新包。
      • 现有包:您可以将现有包添加到您选定的模块。
    • 文件夹:在选定的模块内创建一个新文件夹,方便您组织包。
  • 导入模块:此选项允许您从解决方案本地NuGet 导入现有模块到您选定的模块。
  • 重命名:重命名选定的模块。
  • 移除:从解决方案中移除选定的模块及其所有子项。
  • 重新加载:重新加载选定的模块。
  • ABP Suite:将在 ABP Suite 中打开选定的模块。
  • ABP CLI
    • 安装库:为选定模块中的 UI 项目安装 NPM 包。
    • 升级 ABP 包:更新模块中所有与 ABP 相关的 NuGet 和 NPM 包。
    • 切换到:将您选定的模块切换到指定的 ABP 版本。
      • 稳定版:将您选定的模块切换到最新的稳定版本。
      • 预览版:将您选定的模块切换到预览版本。
      • 夜间构建版:将您选定的模块切换到夜间版本。
    • 清理:删除选定模块中所有 BINOBJ 文件夹。
  • Dotnet CLI
    • 生成:生成您选定的模块。
    • 图形生成:使用图形生成选项生成选定的模块。
    • 清理:清理选定模块先前构建的输出。
    • 还原:还原选定模块的依赖项。
  • 打开方式
    • Visual Studio:在 Visual Studio 中打开模块。仅当您安装了 Visual Studio 时此选项才可用。
    • Visual Studio Code:在 Visual Studio Code 中打开模块。仅当您安装了 Visual Studio Code 时此选项才可用。
    • JetBrains Rider:在 JetBrains Rider 中打开模块。仅当您安装了 JetBrains Rider 时此选项才可用。
    • 终端:在模块目录中打开终端。
    • 资源管理器:在模块目录中打开文件资源管理器。
  • 升级到专业版:仅当您购买了许可证但仍在使用开源(免费)许可证附带的模块时才会显示此选项。有关详细信息,请查看从开源模板迁移文档。上面的屏幕截图中未显示此选项。

添加新的空模块

通过点击解决方案根节点或解决方案文件夹上下文菜单上的添加 -> 新建模块 -> 空模块按钮来创建新模块。微服务解决方案模板还包括微服务网关Web模块。其他解决方案模板,例如应用程序(分层),只能创建DDD标准模块。

create-new-module

如果选择空模块,提供模块名称输出文件夹,然后点击创建按钮将空模块添加到解决方案。

create-new-empty-module

创建空模块后,它将被添加到解决方案中,您应该在解决方案资源管理器中看到以下结构。

created-new-empty-module

添加新的微服务模块

类似于创建空模块,如果您选择微服务模块模板,提供模块名称输出文件夹,然后点击下一步按钮。请注意,模块名称包含解决方案名称作为前缀,并且模块名称中不允许使用点号(.)字符。

create-new-microservice-nolayers-module

您可以为您的微服务模块选择数据库提供程序。选择以下选项之一:

create-new-microservice-nolayers-database-provider

创建微服务时,您必须编辑一些配置。如果选择启用集成选项,它会自动配置微服务与网关、Web 和其他模块协同工作所需的设置。

create-new-microservice-nolayers-enable-integration

如果您不想在微服务模块中包含测试项目,可以取消选中包含测试选项。点击创建按钮将微服务模块添加到解决方案。

create-new-microservice-nolayers-additional-options

创建*微服务(service-nolayers)*模块后,它将被添加到解决方案中,您应该在解决方案资源管理器中看到以下结构。

created-new-microservice-nolayers

要自定义微服务模块模板,请导航到文件资源管理器中的解决方案文件夹,您将在其中找到一个 _templates 文件夹。您可以根据特定需求编辑 service_nolayersgatewayweb 模板。

添加现有模块

ABP 模块有自己的文件扩展名 .abpmdl,创建后它们位于特定的模块文件夹中。类似于在解决方案中创建 C# 项目并将其作为现有项目添加到另一个解决方案,您可以在一个解决方案中创建一个 ABP 模块并将其作为现有模块添加到另一个解决方案。要将现有模块添加到您的解决方案,请使用解决方案根节点或文件夹上下文菜单上的添加 -> 现有模块按钮。此操作将打开选择 ABP 模块文件窗口。选择要添加到解决方案的模块,然后点击打开按钮。

添加的模块可以位于解决方案文件夹之外。路径将被规范化,只要模块可从当前 ABP 解决方案路径访问,模块的位置就具有灵活性。

ABP 模块模板与 ABP Studio 模块方法的区别

在 ABP 中,使用旧 CLI 创建模块解决方案会产生一个包含大量项目的解决方案,其中一些项目可能对特定用例不是必需的。ABP Studio 的新模块方法与 ABP 旧模块模板不同,提供了更大的灵活性。使用 ABP Studio,我们可以创建一个只包含所需项目的模块;例如,一个只包含 DomainApplication 项目的空模块。在这种方法中,术语用于指代模块项目。

此外,需要指出的是,我们不仅可以创建遵循 DDD 原则的模块。模块化文档阐明了框架模块和应用程序模块之间的区别。基本上,每个 C# 项目都引用 Volo.Abp.Core 包并将 Module 类定义为 ABP 类库。我们可以选择仅使用 ABP 类库包开发基础设施模块,并向其他模块提供模块引用。

导入

ABP 模块化具有一个显著优势:可以在一个解决方案中开发模块,并将其作为模块引用添加到您的应用程序或另一个模块中。这种方法允许每个模块维护自己的解决方案,并在不同的应用程序中使用。将一个模块导入到另一个模块中,可以让我们在当前模块内访问该模块的所有功能。在 ABP Studio 中,将一个模块导入到另一个模块是一个简单的过程。您可以使用解决方案资源管理器中模块上的导入部分来导入模块。您也可以使用模块上下文菜单上的导入模块按钮来导入模块。

imports-context-menu

导入模块

此操作将打开导入模块窗口。我们有几种选项可以从解决方案本地NuGet 导入模块。解决方案选项卡显示当前解决方案中的模块。

import-module-solution

本地选项卡中,我们可以从解决方案外部的本地文件夹导入模块。路径将被规范化,只要模块可从当前 ABP 解决方案路径访问,模块的位置就具有灵活性。

import-module-local

NuGet 选项卡中,我们可以从 NuGet 包中导入模块。我们可以按名称搜索模块。

import-module-nuget

点击 确定 完成模块导入。导入模块后,您可以右键单击导入的模块以查看更多选项。

imported-module

安装模块

当您点击安装按钮时,它会打开安装模块窗口。左侧显示导入模块的包,中间部分显示当前模块的包,右侧显示解决方案中已安装的包。您可以选择要安装的包,然后点击确定按钮安装选定的包。

install-module

如果包遵循 DDD 模式,它们将被默认勾选,并带有信息*(推荐)*。如果您不想安装它们,可以取消勾选。

修改安装、卸载或移除模块

安装模块后,我们将会看到修改安装按钮代替安装按钮。我们可以点击修改安装按钮来添加或移除模块中的包。我们可以使用卸载按钮卸载选定的模块。卸载模块后,我们模块中的所有包引用都将被移除。我们可以使用移除按钮移除模块。此选项仅在导入的模块未安装时可用。

更改版本

如果模块是作为 NuGet 包添加的,您可以选择更改模块的版本。点击导入模块上下文菜单上的更改版本按钮打开更改版本窗口。在这里,您可以选择模块的版本,然后点击确定按钮更改模块的版本。

change-version

加载详细信息

要查看模块详细信息,请点击导入模块的加载详细信息按钮。这将向我们显示已分析的模块详细信息,包括聚合根应用服务领域服务EF Core 数据库上下文功能MongoDB 上下文权限仓储接口设置。当我们点击列表中的项目时,它将在主面板中以标签页形式打开详细信息,您可以查看方法、属性、实现等。

load-details

替换为源代码

如果模块是作为 NuGet 包添加的,您可以选择用源代码替换它。点击导入模块上下文菜单上的替换为源代码按钮打开源代码替换窗口。在这里,您可以选择要下载的模块源代码的输出文件夹,然后点击确定按钮用源代码替换模块。如果您勾选将新模块添加到 ABP Studio 解决方案和 C# 解决方案复选框,它将会将模块添加到 ABP 解决方案,创建一个模块文件夹,并将模块项目包含在选定的模块 .NET 解决方案中。

replace-source-code

一个是一个可以添加到模块中的项目,每个包被视为一个 .NET 项目。您可以在模块中创建或添加现有包,每个模块中每个包只允许添加一次。但是,您可以将同一个包添加到不同的模块中。右键单击包会打开一个上下文菜单,您可以在其中找到以下选项:

package-context-menu

  • 添加包引用:此选项允许您向选定的包添加包引用。
  • 重新加载:重新加载选定的包。
  • 移除:从模块中移除选定的包。
  • ABP CLI
    • 安装库:为选定包中的 UI 项目安装 NPM 包。
    • 升级 ABP 包:更新选定包中所有与 ABP 相关的 NuGet 和 NPM 包。
    • 切换到:将您选定的包切换到指定的 ABP 版本。
      • 稳定版:将您选定的包切换到最新的稳定版本。
      • 预览版:将您选定的包切换到预览版本。
      • 夜间构建版:将您选定的包切换到夜间版本。
    • 清理:删除选定包中的 BINOBJ 文件夹。
  • Dotnet CLI
    • 生成:生成您选定的包。
    • 图形生成:使用图形生成选项生成选定的包。
    • 清理:清理选定包先前构建的输出。
    • 还原:还原选定包的依赖项。
  • EF Core CLI:此选项仅对引用了 Microsoft.EntityFrameworkCore.DesignMicrosoft.EntityFrameworkCore.Tools 包的包可见。
    • 添加迁移:打开 EF Core 迁移配置 窗口。输入迁移名称后,它将为您选定的包创建一个新的迁移。
    • 移除上一次迁移:移除您选定包的最后一次迁移。
    • 更新数据库:更新您选定包的数据库。
  • 打开方式
    • Visual Studio:在 Visual Studio 中打开包。仅当您安装了 Visual Studio 时此选项才可用。
    • Visual Studio Code:在 Visual Studio Code 中打开包。仅当您安装了 Visual Studio Code 时此选项才可用。
    • JetBrains Rider:在 JetBrains Rider 中打开包。仅当您安装了 JetBrains Rider 时此选项才可用。
    • 终端:在包目录中打开终端。
    • 资源管理器:在包目录中打开文件资源管理器。

添加新包

要向模块添加新包,请点击模块或模块文件夹上下文菜单上的添加 -> -> 新建包按钮。此操作将打开创建新包窗口。

create-new-package

在左侧选择包模板,右侧将显示包详细信息。根据模板提供包名称和其他信息。点击创建按钮将包添加到模块。添加的包也将包含在模块的 .NET 解决方案中。

添加现有包

ABP 包有自己的文件扩展名 .abppkg,创建后它们位于特定的包文件夹中。类似于在解决方案中创建 C# 项目并将其作为现有项目添加到另一个解决方案,您可以在一个模块中创建一个 ABP 包并将其作为现有包添加到另一个模块。要将现有包添加到您的模块,请使用模块或模块文件夹上下文菜单上的添加 -> -> 现有包按钮。此操作将打开选择包窗口。选择要添加到模块的包,然后点击打开按钮。添加的包也将包含在模块的 .NET 解决方案中。

依赖项

要查看包的依赖项,请打开包树中的依赖项部分。它显示来自 NuGet 包引用的和来自项目引用的项目。要移除依赖项,请点击相应依赖项项目上下文菜单上的移除按钮。

此外,您可以通过点击包上下文菜单上的添加包引用按钮向包添加新的依赖项。此操作将打开添加包引用窗口。您可以使用以下选项添加包引用:

add-package-reference

  • 此模块:仅显示当前模块中的包。
  • 导入的模块:显示导入模块中的包。
  • 此解决方案:列出当前 ABP 解决方案中的所有包。
  • NuGet:允许您按名称和版本搜索包。

您可以使用搜索字段按名称筛选包。如果某个包已在选定的包中被引用,它将被禁用。只需选择所需的包并点击确定按钮即可添加包引用。


在本文档中