# Known **Repository Path**: known/Known ## Basic Information - **Project Name**: Known - **Description**: Known 是基于 Blazor 的轻量级、跨平台、极易扩展的插件式开发框架——一套元数据驱动的组件库 + 后台管理骨架 + 运行时 Schema 渲染 + 内建智能体 + 全栈装配约定,零第三方 UI 依赖。默认路径下你不写一行前端代码、也不生成任何 .razor:一份 *.schema.json 就是页面、菜单与增删改查的完整来源。 - **Primary Language**: C# - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: https://known.org.cn - **GVP Project**: No ## Statistics - **Stars**: 606 - **Forks**: 174 - **Created**: 2018-07-30 - **Last Updated**: 2026-10-31 ## Categories & Tags **Categories**: backend **Tags**: blazor, Ant-Design, dotNET ## README # Known

NuGet .NET Blazor license docs

> Known 是基于 Blazor 的**轻量级、跨平台、极易扩展**的插件式开发框架——一套元数据驱动的组件库 + 后台管理骨架(系统管理 / 权限)+ **运行时 Schema 渲染** + **审批流引擎** + **报表** + **内建智能体** + **整包插件懒加载** + 全栈装配约定,零第三方 UI 依赖。默认路径下你**不写一行前端代码、也不生成任何 `.razor`**:一份 `*.schema.json` 就是页面、菜单与增删改查的完整来源。 Known 不是一个"组件集合包"那么简单。它以 **Razor 类库(RCL)** 的形态,把「123 个开箱即用组件 + 主题与国际化 + 全局交互服务 + **系统管理插件**(账号 / 角色 / 组织架构 / 数据字典 / 通知公告 / 附件 / 审计日志 / 个人中心,带列级权限显隐内核)+ 插件式模块 + 客户端/服务端同一份接口的 ServiceProxy + **运行时 Schema 渲染**(一份 JSON 描述实体 / 页面 / 菜单,框架现挂现渲染成能用的页面与非破坏性建表)+ **可视化设计器**(建模 / 页面 / 表单 / 流程四合一)+ **审批流引擎**(会签 / 或签、并行网关扇出汇聚、子流程派生唤醒、节点钩子、通知投递)+ **报表**(数据集 · 可视化向导 · 透视 · 图表 · 套打 · Excel 导出)+ **内建智能体**(顶栏对话抽屉、技能、页面上下文、逐段流式与会话存储,宿主只写一个 `IAgentService` 方法就能接上大模型)+ **整包插件懒加载**(浏览器首屏只下核心壳,进菜单时按需下载整个插件)+ 全栈装配约定」整合成一套**从前端到后端、从 Web 到桌面**都能复用的开发底座。同一份 `.razor` 可同时跑在 Blazor Server、WebAssembly 与桌面宿主(WinForms 内嵌)上。 --- ## ✨ 核心特性 - **123 个组件,9 大分类** — 覆盖布局、基础、表单、数据展示、反馈、媒体、设备、页面与 AI 组件,风格统一、可主题化;其中 17 个 AI 组件(对话气泡 `Bubble`、思维链 `ThoughtChain`、来源引用 `Sources`、结果卡片 `AgentCards`、欢迎页 `Welcome`、建议 `Suggestion` 等)直接服务于下面那套内建智能体。 - **统一组件约定** — 所有组件继承 `BaseComponent`,一致提供 `Class` / `Style` / `Disabled` / `Visible` / `UserAttributes`;双向绑定遵循 Blazor 官方 `Value` / `ValueChanged` 语义,学习成本极低。 - **主题 & 国际化** — 内置明 / 暗双主题,CSS 变量令牌驱动,切换无闪烁;文案通过 `LocalService` 词条化,`@Local["中文"]` 即可本地化,框架自带中英词表。 - **单页 / 多页签导航** — `AdminLayout` 按路由变化记账(侧栏、开发中心、命令面板与程序化 `NavigateTo` 一视同仁),`PageTabs` 渲染页签条:点签导航、悬停关闭、右键「关闭当前 / 关闭其他 / 关闭全部」,首页钉在首位不可关;页签多到装不下时右端露出「更多」下拉收纳全部页签,当前页签自动滚进可视区;形态在顶栏用户菜单里一键切换并落 localStorage,页签清单跨刷新保留(切换页签即导航,页面照常重新初始化)。 - **全局交互服务** — 消息条、确认框、Loading、通知统一由注入的 `UIService` 发起、由全局 `` 渲染,页面里不再散落弹窗代码。 - **外壳可切换** — `AdminLayout`(宽侧栏)与 `RailLayout`(图标窄边栏 + 二级列)共用外壳基类 `AppShell`,登录门禁、`[Menu]` 装配、面包屑推导、软刷新、页签记账、水印与命令面板逐项同源;路由默认布局交给 `ShellLayout` 这一层分发,它按**每个浏览器自己的偏好**在 `Config.Shells` 候选里挑一个渲染,用户在顶栏头像下拉的「布局」里点一下即整块换骨架、不重载页面,没选过则落回 `Config.LayoutType`。宿主用 `Config.AddShell` 追加自家模板,或把候选清到不足两项钉死外壳。 - **插件式模块架构** — `Config.AddModule()` 扫描程序集,把整个业务模块(页面、菜单、服务、实体)自动接入框架,按领域水平切分、按需加载。 - **整包插件懒加载** — 一个插件就是**一个 Razor 类库工程**,连带 `[Service]`/`[WebApi]`/`[Table]` 的重插件也能整包按需装载:浏览器首屏只下核心壳,进相关菜单时框架(`Config.AddLazyPlugin` 入队 → `Config.UseLazyAssemblyLoader` 在装配菜单前下载整包并反射装配)现取现装,页面 `@inject` 的 `[WebApi]` 服务由 `LazyProxyServiceProvider` 现场造代理兜底、**页面代码一字不改**。Server / 桌面宿主里同一句 `AddLazyPlugin` 即时反射装配,行为与 eager 逐字一致、零回归;且**零 contracts 层**——`IXxxService` 接口本身就是契约。首屏体积与"全都要"的矛盾,一次解开。 - **一份接口 = 前后端契约** — `ServiceProxy` 让客户端直接消费与 `[WebApi]` 服务端接口同签名的接口,无需手写 HttpClient 样板。**接口默认必须登录**:`/api/…` 端点未登录一律 401,只有契约或方法显式标 `[WebApiAnonymous]` 才匿名放行(登录、验证码、自助注册、登录页所需设置与语言读取、登录前错误上报);执行入口再按同一份标注兜底判定,宿主自行映射端点也不会把业务接口暴露出去。 - **运行时 Schema 闭环** — 一份 `*.schema.json` 描述实体(含 `enum` 下拉、`ref` 外键下拉、`children` 一对多子表)+ 页面(`blocks` 所见即所发区块树,或 `views` + `layout` 声明式)+ `menu` 导航树;`SchemaRegistry` 在运行时直接把它渲染成能用的页面、非破坏性建表、`/runtime/{Key}` 分派、侧栏自动装配——**不生成任何 `.razor`**,你要写的只有挂在保存/删除节点上的 `[Hook]` 后端业务钩子。 - **系统管理插件** — `Known.Admin` 提供开箱后台骨架:账号管理、角色管理、组织架构、数据字典、通知公告、附件管理、审计日志、个人中心八页随取随用;权限内核「菜单即权限」——`[Menu(..., Roles = "…")]` 决定侧栏可见性,直敲 URL 被页面守卫挡回,`Perm.Has` / `Perm.HideColumns` 细到**列级与按钮级**显隐,`PermissionState` / `PermissionCatalog` 按登录人装配,改角色即刻生效。这些授权原语已上提核心,插件懒装与否都不影响显隐。 - **审批流引擎** — `Known.FlowForm` 自带可视化流程设计器 + 运行时引擎:节点类型覆盖 `start`/`approval`/`task`/`notify`/`parallel`/`subflow`/`condition`/`end`;审批支持**会签**(`vote=all` 人人必过、一票否决)与**或签**(`vote=any` 任一人先表态即定生死、其余待办自动作废);**并行网关**扇出多分支、汇聚合体后恢复单游标;**子流程**在独立事务派生子单、父单停等、子办结自动唤醒续走;办理节点可绑 `IFlowNodeHook` 自定义动作并挂起 / 恢复;`notify` 节点经宿主 `INotifier` 真实投递站内信 / Webhook。申请中心、待我处理、我发起的一目了然。 - **报表** — `Known.Report` 把数据讲成故事:数据集(`SqlGuard` 护栏下的 `DatasetExecutor`)→ 可视化向导拖拽成图 → 透视表(行列分组聚合 `Aggregator`)+ 图表 `ReportChart` → 套打画布所见即所得排版 → Excel / 打印导出,无需再手写统计页。 - **后台任务** — `Known.Jobs` 让「写个类就跑」成立:实现 `IJob` 并标 `[Job("编码", "名称", Cron = "*/5 * * * *")]`,发布后自动出现在任务中心,Cron / 运行参数 / 超时 / 重试 / 节点标签都在界面上改;执行只在独立的 `KnownWorker` 进程里发生,**升级重启 Web 不打断任何正在跑的任务**。多起几份 Worker 自动分摊——认领是带 `Revision` 条件的 UPDATE,靠数据库行级原子性决出唯一赢家,不需要 Redis 或消息队列;节点心跳 + 租约保证崩溃后的「运行中」会被回收为失败,每次执行(含跳过、超时、失联中断)都留痕。 - **可视化设计器** — `Known.Studio` 收录建模器(实体)、页面设计器、表单设计器三大可视化画布,改动直接落到运行时 Schema 渲染;流程设计器随 `FlowForm` 一同提供。设计即运行,长到要脱离 Schema 长期维护时再 Eject 成代码。 - **内建智能体(Agent)** — 凡用 `AdminLayout` 的应用,顶栏自带一个开箱即用的对话抽屉 `AgentDrawer`:气泡、技能条、上下文条、附件与模型选择、语音输入、中途停止、历史会话都在壳子里。框架只定义 `IAgentService` 契约、**不绑定任何模型厂商**——宿主写一个 `[Service]` 实现即接管,一个都不接时抽屉照常打开并如实回报未接入,绝不静默吞掉用户的话。 - **技能 · 上下文 · 流式 · 会话** — `Config.AddSkill()` 声明可选技能(选中即注入本轮 system 指令,可按角色/图标/排序);`Config.Agent.ContextProvider` 自动把"用户正站在哪个页面 / 哪张单据"随请求带上;回答可附结构化结果卡片 `AgentCards`;填上 SignalR 中心即可由 `IAgentStream` 逐段吐字;`IAgentStore` 契约默认带进程内 `MemoryAgentStore`(按用户隔离、运行期间可回看会话,重启即清空),跨重启落库随可选的 `Known.AgentKit`(`DbAgentStore` 落 `SysAgentSession` / `SysAgentMessage`)。 - **多模型网关 · 本地优先** — `KnownAiClient` 对接本机 `known-ai` 侧车(发现文件 + 一次性配对令牌、只走 `127.0.0.1`、业务数据不出机),也可挂任意 OpenAI 兼容服务;用户在模型条自选 `local` / 自定义模型,框架只按 `id` 选、**绝不接触密钥与 BaseURL**。更能让 AI 反哺建模:一句话生成模块结构、生成整包页面 Schema 直接落运行时渲染(`GenerateStructureAsync` / `GeneratePageSchemaAsync`)。 - **智能体工具契约(Function Calling)** — `[AgentTool]` 把任意方法标成"可被智能体调用的工具",与 `[Hook]`/`[Menu]`/`[Table]` 同构;`IToolRegistry` + `AgentToolDescriptor`(OpenAI 兼容 `function.parameters`)落在开源侧,框架只声明、不扫描不执行——工具运行时由宿主自写或接入可选的智能体套件装配,不接入也照常编译。 - **多宿主** — `KnownWeb`(Server)、`KnownWasm`(WebAssembly)、`KnownWin`(桌面)三种运行形态共享同一套组件与业务代码。 - **PWA / 离线** 等工程化能力,便于分发与增量交付。 --- ## 🚀 快速开始 Known 是纯 Razor 类库,**不依赖任何第三方 UI 框架、也不需要额外 NuGet 源**。跑起来只需三步。 ### 1. 安装与引用 要求 `net10.0` 及以上。以 NuGet 包引入: ```bash dotnet add package Known ``` 或在解决方案里直接引用工程: ```xml ``` > RCL 会自动输出静态资源 `_content/Known/css/web.css` 与 `_content/Known/js/web.js`,在 `index.html` 引一次即可拿到全部样式与主题能力,无需手工拷贝。 ### 2. 注册服务 在 `Program.cs` 中装配框架核心与端侧选项: ```csharp using Known; var builder = WebAssemblyHostBuilder.CreateDefault(args); builder.RootComponents.Add("#app"); // 核心:UIService / LocalService / 鉴权与菜单提供者 + 应用信息 builder.Services.AddKnown(option => { option.Id = "MyApp"; option.Name = "我的应用"; }); // 客户端:HttpClient + ServiceProxy 接口代理 builder.Services.AddKnownClient(option => { option.BaseAddress = builder.HostEnvironment.BaseAddress + "api"; }); await builder.Build().RunAsync(); ``` 服务端点用 `AddKnownWeb`、桌面用 `AddKnownDesktop`;也可用统一入口 `AddKnownApp(AppType.Web | AppType.Desktop)` 一次装配。 要自建**全栈 HTTP 服务端宿主**(把 `[WebApi]` 契约真正暴露成接口、并接上 Cookie 登录),再引用 `Known.Core`,装配时补一句服务端骨架、管道里补一句 `UseKnown` 即可(`KnownWeb` 就是这么组装配的): ```csharp builder.Services.AddKnownCore(); // Cookie 认证 / 授权 / IAuthProvider + 在线会话登记 // ... app.UseKnown(); // 静态资源 + 认证中间件 + 把所有 [WebApi] 映射成真实 HTTP 端点 ``` ### 3. 挂载布局 `_Imports.razor` 引入命名空间: ```razor @using Known @using Known.Components @using Known.Extensions @using Known.Models @using Known.Platforms ``` `App.razor` 保留标准 Blazor `Router`,把 `DefaultLayout` 指向基于 `AdminLayout` + `Container` 的自家壳: ```razor ``` 至此,`