NovaAdmin.Blazor
1.0.9
dotnet add package NovaAdmin.Blazor --version 1.0.9
NuGet\Install-Package NovaAdmin.Blazor -Version 1.0.9
<PackageReference Include="NovaAdmin.Blazor" Version="1.0.9" />
<PackageVersion Include="NovaAdmin.Blazor" Version="1.0.9" />
<PackageReference Include="NovaAdmin.Blazor" />
paket add NovaAdmin.Blazor --version 1.0.9
#r "nuget: NovaAdmin.Blazor, 1.0.9"
#:package NovaAdmin.Blazor@1.0.9
#addin nuget:?package=NovaAdmin.Blazor&version=1.0.9
#tool nuget:?package=NovaAdmin.Blazor&version=1.0.9
NovaAdmin
基于 Blazor Server 的后台管理与 SaaS 中台骨架:UI 使用 BootstrapBlazor,数据访问使用 FreeSql,提供开箱即用的管理端基础能力与可扩展业务框架,具备前后端统一技术栈、组件化程度高、扩展性强、部署维护成本低等技术优势,尤其适合医疗系统、检验质控平台等场景的定制开发。
适合作为企业后台、多租户管理端、医疗信息化项目或二次开发起点,可显著缩短项目搭建、功能迭代与交付上线周期。
技术栈概览
| 层次 | 说明 |
|---|---|
| 前端 | Blazor Server、BootstrapBlazor 组件库、Razor 页面(含 Dock 多标签布局等) |
| 后端 | ASP.NET Core 8、Web API(Swagger / RapiDoc)、依赖注入 |
| ORM | FreeSql(支持多库路由、仓储、工作单元、CodeFirst 同步结构) |
| 可选能力 | 多租户、RBAC 菜单与按钮权限、定时任务(FreeScheduler)、数据字典与参数、OSS 上传(MinIO / 阿里云 / 腾讯云等)、审计与登录日志等 |
仓库结构
NovaAdmin.sln # 解决方案
NovaAdmin/ # 主启动项目(Web 宿主,示例业务与种子数据)
NovaAdmin.Blazor/ # Razor 类库:管理端页面、API 控制器、扩展与静态资源
NovaAdmin:入口Program.cs,配置数据库连接、AddNovaAdmin注册、地图 Razor 组件与 Admin API;可在此增加本业务的Entities、Components、Api、SeedData。NovaAdmin.Blazor:封装后台通用能力(登录、菜单、用户角色、租户、文件、任务调度等),静态资源位于wwwroot/(如novaadmin.css/novaadmin.js),发布时引用路径为_content/NovaAdmin.Blazor/。
使用模板创建项目
如果你希望直接从 NuGet 模板快速创建一个新的后台项目,可使用 dotnet new 安装并生成。建议始终显式指定项目名,避免生成到当前目录并和现有文件混在一起:
# 安装模板
dotnet new install NovaAdmin.Templates
# 创建新项目
dotnet new novaadmin -n MyAdmin -o MyAdmin
# 进入项目目录并运行
cd MyAdmin
dotnet restore
dotnet run
创建完成后,模板项目会自动通过 NuGet 引用 NovaAdmin.Blazor,并同时生成 MyAdmin.Tests 测试项目。你可以在生成的宿主项目基础上继续增加自己的:
Entities实体Components页面与布局Api控制器或服务接口SeedData初始化数据
同时模板还会生成配套的 MyAdmin.Tests 测试项目,默认已引用生成后的宿主工程,方便你直接补充接口回归测试和缓存相关测试。
默认情况下,项目使用 SQLite,本地数据库文件名为 novaadmin.db。首次运行后,可直接访问控制台输出的地址开始使用。
如需更新到模板的最新版本,可先更新模板包后重新创建项目:
dotnet new update
dotnet new install NovaAdmin.Templates
如需卸载模板:
dotnet new uninstall NovaAdmin.Templates
快速开始
环境:安装 .NET 8 SDK。
# 还原并编译
dotnet build NovaAdmin.sln
# 运行宿主项目(默认 SQLite 数据库文件为 novaadmin.db)
cd NovaAdmin
dotnet run
浏览器访问控制台输出的地址(如 http://localhost:5038,以 launchSettings.json 为准)。
默认账号(由类库种子数据初始化,可在首次运行前于扩展中修改):用户名与密码一般为 admin / admin,请以实际库内数据为准。
Docker 部署
项目内提供了自动化脚本 NovaAdmin/docker-auto.sh,用于一键重建并启动容器。
cd NovaAdmin
chmod +x docker-auto.sh
./docker-auto.sh
脚本默认使用宿主机端口 6038,会自动执行以下流程:
- 检查当前终端是否已加载
docker用户组,必要时使用sg docker重新执行脚本。 - 清理占用目标端口的本地进程。
- 执行
docker compose build、docker compose down、docker compose up -d。
如需改用其他宿主机端口,可在运行前传入环境变量:
cd NovaAdmin
HOST_PORT=6038 ./docker-auto.sh
容器启动后,默认通过 http://localhost:6038 访问;如修改了端口,则按实际映射端口访问。
界面演示
以下截图可作为后台能力的直观演示案例:
题目管理
展示题目录入与管理页面效果:
角色权限
展示角色列表与权限配置相关界面:
定时任务
展示任务调度与执行管理页面:
扩展与集成要点
AddNovaAdmin:在WebApplicationBuilder上注册 FreeSql 云、后台服务、BootstrapBlazor、控制器与 Swagger 等;通过NovaAdminOptions传入业务程序集、连接配置、是否开启 Swagger 等。- 附加 Razor 程序集:宿主已使用
AddAdditionalAssemblies(typeof(NovaAdminOptions).Assembly);若业务页面放在宿主程序集中,保持Assemblies含typeof(Program).Assembly即可参与菜单与路由发现。 - API:
app.UseAdminOmniApi()挂载管理端 Web API(带 Admin 上下文初始化);与 UI 共用同一套认证与租户逻辑。 - 命名空间约定:宿主示例 API / 种子使用
NovaAdmin.API、NovaAdmin.SeedData;类库内为NovaAdmin.Blazor.*(及部分历史命名如AdminOmni(filter/mvc))。
许可与致谢
- 第三方组件各自遵循其开源协议;商用前请自行核对 BootstrapBlazor、FreeSql 等依赖许可。
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net8.0
- Aliyun.OSS.SDK.NetCore (>= 2.14.1)
- BceSdkDotNetCore (>= 1.0.6.1123)
- BootstrapBlazor (>= 10.1.0)
- BootstrapBlazor.BarCode (>= 10.0.0)
- BootstrapBlazor.FontAwesome (>= 10.0.0)
- BootstrapBlazor.Middleware (>= 10.0.0)
- FreeRedis (>= 1.5.2)
- FreeScheduler (>= 2.1.4)
- FreeSql (>= 3.5.304)
- FreeSql.Cloud (>= 2.0.1)
- FreeSql.DbContext (>= 3.5.304)
- FreeSql.Extensions.AggregateRoot (>= 3.5.304)
- IGeekFan.AspNetCore.RapiDoc (>= 0.0.8)
- Microsoft.AspNetCore.Mvc.NewtonsoftJson (>= 8.0.0)
- Minio (>= 7.0.0)
- NCrontab (>= 3.4.0)
- Newtonsoft.Json (>= 13.0.3)
- OnceMi.AspNetCore.OSS (>= 1.1.6)
- Otp.NET (>= 1.4.1)
- Qiniu (>= 8.7.0)
- Rougamo.Fody (>= 5.0.2)
- Serilog.AspNetCore (>= 9.0.0)
- Serilog.Settings.Configuration (>= 9.0.0)
- Serilog.Sinks.File (>= 6.0.0)
- SixLabors.ImageSharp (>= 3.1.12)
- Swashbuckle.AspNetCore (>= 10.0.0)
- Tencent.QCloud.Cos.Sdk (>= 5.4.49)
- Yitter.IdGenerator (>= 1.0.14)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.