【abp Vnext】下载并运行abp Vnext项目详细教程文档

软件环境:电脑需要基础软件环境node.js、npm,这些网上教程很多,请自行百度
mysql安装教程Mysql 安装以及初次登录修改密码贴
redis安装教程redis的安装以及客户端的安装详细教程

1.安装Visual Studio 2022

官方下载Professional 2022:https://visualstudio.microsoft.com/zh-hans/vs/
在这里插入图片描述
下载完成后安装:
在这里插入图片描述
点击继续按钮,出现下面截图
在这里插入图片描述
然后勾选(ASP.NET和Web开发和Visual Studio 扩展开发
在这里插入图片描述
在这里插入图片描述

自定义选择安装的位置,然后点击安装
在这里插入图片描述

在这里插入图片描述


1.安装ABP CLI脚手架

在命令行终端中安装 ABP CLI:

dotnet tool install -g Volo.Abp.Cli

如果报错如下,则说明本地的net sdk版本低于7.0
在这里插入图片描述
解决办法
1.官网下载.NET 7.0https://dotnet.microsoft.com/en-us/download/dotnet/7.0
2.根据电脑系统以及版本号来下载(我的电脑是windows10 x64版本的)
在这里插入图片描述
安装完成后,在终端输入命令验证下,显示version是7,则没问题

dotnet --info

在这里插入图片描述
在终端再次输入如下命令安装 ABP CLI

dotnet tool install -g Volo.Abp.Cli

执行成功后的截图
在这里插入图片描述


2.选择abp框架配置

abp官网:https://abp.io/get-started
根据需求选择对应的配置(我这次选择的多层应用、mvc UI框架、mysql数据库、无移动端)
在这里插入图片描述

然后复制命令
在这里插入图片描述

用cmd弹窗进入到指定的项目文件夹
输入如下命令行

abp new Acme.BookStore -dbms MySQL --tiered --theme basic 

在这里插入图片描述

出现如下,则说明成功
在这里插入图片描述


3.运行abp框架

鼠标双击用vs2022打开

在这里插入图片描述

默认结构
在这里插入图片描述
选择Acme.BookStore.DbMigrator为启动项
在这里插入图片描述

修改数据库配置
Acme.BookStore.AuthServerAcme.BookStore.DbMigratorAcme.BookStore.HttpApi.Host的appsettings.json文件更改为需要连接的mysql数据库,Server是数据库ip、Port是端口、Database是数据库名、Uid是数据库账号、Pwd是数据库密码

在这里插入图片描述
在工具==》NuGet包管理器==》程序包管理器控制台==》默认项目选择EntityFrameworkCore在这里插入图片描述
安装Microsoft.EntityFrameworkCore.Design 包
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
注意点:
因为在cmd命令窗口输入的如下命令,查询到的版本号为7.0.202

dotnet --version

所以Microsoft.EntityFrameworkCore.Tools包需要降级为7.0.2的版本(先卸载项目自带的7.0.4,然后再安装7.0.2,否则运行项目会报错500.30),如下
在这里插入图片描述

上面安装完成后,在控制台输入如下命令行,生成迁移文件

Add-Migration Init

在这里插入图片描述
跑完再执行迁移指令

 Update-Database

在这里插入图片描述
然后配置启动项,在解决方案Acme.BookStore里,选择配置启动项
在这里插入图片描述
选择多个启动项目,然后更改AuthServer和Host,然后点击应用、确定,最后按Ctrl+F5运行
在这里插入图片描述

然后效果图如下:
在这里插入图片描述


在这里插入图片描述


踩坑点:

1.安装net SDK7.0以前版本需要使用Vs2022版本,则执行迁移会报错

2.因为本地安装的Net SDK7.0.202版本,所以项目Acme.BookStore.EntityFrameworkCore解决方案的NuGet方案需要降低版本为7.0.2版本,否则运行项目会报错500.30

3.官方文档:介绍目录结构作用


项目组织在src和test文件夹中. src文件夹包含实际应用程序,该应用程序基于前面提到的DDD原则进行分层. 下图展示了解决方案的层和项目的依赖关系:

在这里插入图片描述

下面介绍解决方案中的项目及依赖关系

.Domain.Shared 项目

项目包含常量,枚举和其他对象,这些对象实际上是领域层的一部分,但是解决方案中所有的层/项目中都会使用到.

例如 BookType 枚举和 BookConsts 类 (可能是 Book
实体用到的常数字段,像MaxNameLength)都适合放在这个项目中.

该项目不依赖解决方案中的其他项目. 其他项目直接或间接依赖该项目

.Domain 项目

解决方案的领域层. 它主要包含 实体, 集合根, 领域服务, 值类型, 仓储接口 和解决方案的其他领域对象.

例如 Book 实体和 IBookRepository 接口都适合放在这个项目中.

它依赖 .Domain.Shared 项目,因为项目中会用到它的一些常量,枚举和定义其他对象. .Application.Contracts
项目 项目主要包含 应用服务 interfaces 和应用层的 数据传输对象 (DTO). 它用于分离应用层的接口和实现.
这种方式可以将接口项目做为约定包共享给客户端.

例如 IBookAppService 接口和 BookCreationDto 类都适合放在这个项目中.

它依赖 .Domain.Shared 因为它可能会在应用接口和DTO中使用常量,枚举和其他的共享对象.

.Application 项目

项目包含 .Application.Contracts 项目的 应用服务 接口实现.

例如 BookAppService 类适合放在这个项目中.

它依赖 .Application.Contracts 项目, 因为它需要实现接口与使用DTO. 它依赖 .Domain
项目,因为它需要使用领域对象(实体,仓储接口等)执行应用程序逻辑. .EntityFrameworkCore 项目 这是集成EF
Core的项目. 它定义了 DbContext 并实现 .Domain 项目中定义的仓储接口.

它依赖 .Domain 项目,因为它需要引用实体和仓储接口. 只有在你使用了EF Core做为数据库提供程序时,此项目才会可用.
如果选择的是其他数据库提供程序那么项目的名称会改变

.EntityFrameworkCore.DbMigrations 项目

包含解决方案的EF Core数据库迁移. 它有独立的 DbContext 来专门管理迁移.

ABP是一个模块化的框架,理想的设计是让每个模块都有自己的 DbContext 类. 这时用于迁移的 DbContext 就会发挥作用.
它将所有的 DbContext 配置统一到单个模型中以维护单个数据库的模式.
对于更高级的场景,可以程序可以拥有多个数据库(每个数据库有一个或多个模块表)和多个迁移DbContext(每个都维护不同的数据库模式)

需要注意,迁移 DbContext 仅用于数据库迁移,而不在运行时使用.

它依赖 .EntityFrameworkCore 项目,因为它重用了应用程序的 DbContext 配置 . 只有在你使用了EF
Core做为数据库提供程序时,此项目才会可用. 参阅Entity Framework Core迁移指南了解这个项目的详细信息.

.DbMigrator 项目

这是一个控制台应用程序,它简化了在开发和生产环境执行数据库迁移的操作.当你使用它时;

必要时创建数据库(没有数据库时). 应用未迁移的数据库迁移. 初始化种子数据(当你需要时). 这个项目有自己的
appsettings.json 文件. 所以如果要更改数据库连接字符串,请记得也要更改此文件.

初始化种子数据很重要,ABP具有模块化的种子数据基础设施. 种子数据的更多信息,请参阅文档.

虽然创建数据库和应用迁移似乎只对关系数据库有用,但即使你选择NoSQL数据库提供程序(如MongoDB),也会生成此项目.
这时,它会为应用程序提供必要的初始数据.

它依赖 .EntityFrameworkCore.DbMigrations 项目 (针对EF Core),因为它需要访问迁移文件. 它依赖
.Application.Contracts 项目,因为它需要访问权限定义在初始化种子数据时为管理员用户赋予所有权限.

.HttpApi 项目

用于定义API控制器.

大多数情况下,你不需要手动定义API控制器,因为ABP的动态API功能会根据你的应用层自动创建API控制器.
但是,如果你需要编写API控制器,那么它是最合适的地方.

它依赖 .Application.Contracts 项目,因为它需要注入应用服务接口. .HttpApi.Client 项目
定义C#客户端代理使用解决方案的HTTP API项目. 可以将上编辑共享给第三方客户端,使其轻松的在DotNet应用程序中使用你的HTTP
API(其他类型的应用程序可以手动或使用其平台的工具来使用你的API).

ABP有动态 C# API 客户端功能,所以大多数情况下你不需要手动的创建C#客户端代理.

.HttpApi.Client.ConsoleTestApp 项目是一个用于演示客户端代理用法的控制台应用程序.

它依赖 .Application.Contracts 项目,因为它需要使用应用服务接口和DTO.
如果你不需要为API创建动态C#客户端代理,可以删除此项目和依赖项

.Web 项目

包含应用程序的用户界面(UI).如果使用ASP.NET Core MVC UI,
它包括Razor页面,javascript文件,样式文件,图片等…

包含应用程序主要的 appsettings.json 配置文件,用于配置数据库连接字符串和应用程序的其他配置

依赖 .HttpApi 项目,因为UI层需要使用解决方案的API和应用服务接口. 如果查看 .Web.csproj 源码, 你会看到对
.Application 和 .EntityFrameworkCore.DbMigrations 项目的引用.

在编写UI层时实际上不需要这些引用. 因为UI层通常不依赖于EF Core或应用层的实现.
这个启动模板已经为分层部署做好了准备,API层托管在不同与UI层的服务器中.

但是如果你不选择 --tiered 选项, .Web项目会有这些引用,以便能够将Web,Api和应用层托管在单个应用程序站点.

你可以在表示层中使用领域实体和仓储,但是根据DDD的理论,这被认为是一种不好的做法.

Test 项目

解决方案有多个测试项目,每一层都会有一个:

.Domain.Tests 用于测试领域层. .Application.Tests 用于测试应用层.
.EntityFrameworkCore.Tests 用于测试EF Core配置与自定义仓储. .Web.Tests
用于测试UI(适用于ASP.NET Core MVC UI). .TestBase 所有测试项目的基础(共享)项目. 此外,
.HttpApi.Client.ConsoleTestApp
是一个控制台应用程序(不是自动化测试项目),它用于演示.Net应用程序中HTTP API的用法.

测试项目是用于做集成测试的:

它完全集成到ABP框架和应用程序的所有服务. 如果数据库提供程序是EF
Core,测试项目会使用SQLite内存数据库,如果是MongoDB,它使用Mongo2Go库.
授权被禁用,任何的应用服务都可以在测试中轻松调用.
你依然可以编写单元测试,只不过它很难写(因为你需要准备mock/fake对象),但它的运行速度更快(因为只测试单个类并跳过所有初始化过程).

猜你喜欢

转载自blog.csdn.net/weixin_43861689/article/details/129581932
ABP