TKWF.Ext.Analytics 0.1.1

There is a newer prerelease version of this package available.
See the version list below for details.
dotnet add package TKWF.Ext.Analytics --version 0.1.1
                    
NuGet\Install-Package TKWF.Ext.Analytics -Version 0.1.1
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="TKWF.Ext.Analytics" Version="0.1.1" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="TKWF.Ext.Analytics" Version="0.1.1" />
                    
Directory.Packages.props
<PackageReference Include="TKWF.Ext.Analytics" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add TKWF.Ext.Analytics --version 0.1.1
                    
#r "nuget: TKWF.Ext.Analytics, 0.1.1"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package TKWF.Ext.Analytics@0.1.1
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=TKWF.Ext.Analytics&version=0.1.1
                    
Install as a Cake Addin
#tool nuget:?package=TKWF.Ext.Analytics&version=0.1.1
                    
Install as a Cake Tool

TKWF.Extensions

TKWF 扩展模块仓库——权限、导航、身份、审计、设置、邮件、存储、账户、数据字典等。

扩展模块与主框架 TKW.Framework 解耦:扩展代码、测试、使用指南独立演进,不进入主框架 TKW.Framework.slnx。


架构图

扩展仓架构图总览(archify 生成,自包含 HTML,可直接双击打开):.archify/index.html

ID 图
A2 扩展仓全景——50+ 扩展按领域聚类、落地状态、对主框架契约的依赖

主框架(_TKWF / TKW.Framework)自己的架构图在主仓 .archify/index.html,由主框架维护。


扩展模块一览

各扩展模块使用说明

扩展 版本 说明 Tag README 指南
Permissions V0.9.5 细粒度权限定义 / fail-closed 检查 / 编译期权限名校验(PERM001)/ 多用户批量权限检查(V0.9.0:IPermissionBatchChecker——单权限×多用户,按 ProviderKey 分组归因) $(System.Collections.Specialized.OrderedDictionary[Permissions]) README 指南
Permissions.Abstractions V0.2.1 权限契约抽象(IPermissionChecker/RequirePermission/IRoleProvider) — — —(并入 Permissions)
Permissions.Validation V0.8.0(规则集)/0.1.1(包线,未发布) 扩展侧 PERM001 DiagnosticAnalyzer(从内核移除耦合);IsPackable=false 从不发布独立包(源码 ProjectReference 接线),V0.8.0 为规则集功能线版本,0.1.x 为 MinVer 包线 tag — — —(并入 Permissions)
Identity V0.5.3 用户 / 角色 / 用户角色分配 + PasswordHasher 凭据验证;GetRolesAsync VEntity 跨表 JOIN(V0.3.0)+ REST 直接暴露(V0.4.0:UserRoleViewQueryService——GET /api/identity/user-roles 仅本人,VEntity DTO 一等公民含 DisplayName/IsSystemRole) $(System.Collections.Specialized.OrderedDictionary[Identity]) README 指南
Account V0.5.0 账户锁定 + 密码重置流程(主框架 V4.9.45 缺口补齐)+ 登录历史与异常检测(V0.3.0,消费 SecurityLog 查询)+ 依赖倒置(V0.4.0,SecurityLog 契约改引 Abstractions) $(System.Collections.Specialized.OrderedDictionary[Account]) README 指南
Account.Abstractions V0.1.2 账户契约抽象(IAccountPasswordManager 等——ADR48 D7 依赖倒置,零框架引用纯 BCL) — — —(并入 Account)
AuthCenter V0.12.0(功能线)/已发布 v0.10.1 认证中心(2026-10-06 归层:Authentication → AuthCenter 全面归层 + 内建标准对内端点;令牌体系手写 RS256 JWT + kid 轮换 + 黑名单落库 + Refresh rotation + TokenVersion 闭环 / 认证矩阵 Provider(短信 + 密码)+ 外部 IdP 桥接(T5 2026-10-09:IExternalIdpLoginService 借道 Federation——微信双源 Provider/ApiClient/LoginService 已删,协议单源归平台网关库) / 登录保护 / 票据换令牌(PKCE)/ 身份适配层(JwtDomainUserParser/ITokenVerifier/IAuthorizationMapper/UserHelperBase/中间件)/ 跨系统映射 / 平台凭证 / 账号查询写契约 + 档案能力(V0.9.0 起 UserCenter 基础功能并入——UserProfile 1:1 档案表 + GetProfileByUIdAsync))+ V0.6.0(归层迭代:包名/命名空间/契约包 AuthCenter.Abstractions 统一归层——Federation 同步;登录门面升级 LoginResult(门面内认证→取账号→签发全编排,表现层零编排);AuthCenterWebExtension(原 JwtAuthenticationWebExtension)ConfigureEndpoints 内建 6 标准对内端点(sms 验证码/短信登录/外部 IdP 登录(T5:/login/external/{channelType} 替代 /login/wechat)/refresh/logout/票据换令牌——minimal API + 游客帧 + 免认证 + AuthCenterEndpointOptions TKWF:AuthCenter:Web 路径可配置,配置分层 AGENTS §8)) + V0.7.0(E4 密钥管理抽象(CPM 4.10.61)——删 PlatformCredentialKeyStore/DevRsaKeyCache 静态类,PlatformCredentialService 注入 keyed ISymmetricKeyProvider(SymmetricKeyProviderKeys.AuthCenter,FileSymmetricKeyProvider 构造即加载:生产 fail-fast / 开发两分支)+ DevKeyCache<RsaKeySet> 单例(dev 密钥缓存非静态);PlatformCredentialEntityDataService 加密上移服务层(回归纯持久化,消除唯一 SG1 ctor 阻塞点);AES-GCM 单段规范格式(委托 AeadEncryptionUtil);测试并行化恢复(去 DisableTestParallelization)) + V0.8.0(认证 API 补全——内建 3 端点:/verify(已认证内省,判别器=中间件验签产物,无效 Bearer 401 非 RFC 7662)/ /grants(应用授权状态,AuthGrantEntity 数据底座唯一索引 UX(UserId,AppId,Source) + IAuthGrantQueryService/IAuthGrantCommandService 双门面)/ /sms/verify(验证码独立校验);B5 票据绑定缺口闭环——OAuthTicketIssueRequest.UserId 签发即绑 + BindTicketAsync 已认证帧补绑(userId 取 User 不经请求体,CAS 条件更新);exchange 成功落登录授权(best-effort);配置分层 3 新开关) + V0.9.0(身份域重构与密码能力——ADR-AuthCenter-身份域数据模型与密码能力边界:A.1-A.8 凭据/档案表级分离(AuthAccount 瘦身凭据白名单 + UserProfile 1:1 档案 + 表名 TKWF_AuthAccount/TKWF_UserProfile)/ AuthLevel 泛化(1=手机号/2=联邦快捷,剔 3=教师核实)/ TeacherVerified 迁出(令牌移除 teacher_verified claim)/ 联邦 Id 归一化(微信 3 列删 → PlatformAccountMap 通道)/+ B.9-B.11 密码三件套 + 密码策略(SecurePassword 协议 决策 1——客户端算 clientHash+salt 服务端零明文 + PasswordPolicyOptions 历史防重用 + 初始强制改密 + 账号冻结 + IRateLimitCheck 频控 v4.10.67)(PasswordAuthenticationProvider + IPasswordLoginService + SetPasswordAsync(CAS+TokenVersion++)+ IPasswordResetService 找回三通道 SMS/Email/扫码,不实现 IAccountPasswordManager 第二实现)/ C.14 UserCenter 退役(IUserProfileSource 标 Obsolete)/ EnabledAuthTypes fail-closed 生效;134 用例全绿) + Web 装配钩子(v4.10.45:AuthCenterWebExtension<TUserInfo>——RestoreUser 委托直传 + BeforeAuthentication 锚点 + 内建端点,旧 AddJwtAuthentication/UseTkfwJwtAuthentication 删除;短路判定 IsAuthenticated 门控 + 黑盒哨兵冒烟) + ITokenVerifier 无帧消费 500 修复(V0.5.2 游客帧)+ 开发模式临时 RSA 密钥修复(V0.5.3 DevRsaKeyCache)+ Development 启动崩溃修复(V0.5.4 不传参) + V0.10.0 外部 IdP 票据 SPA 兑现(2026-10-19——方案 Oracle PASS WITH CONDITIONS 用户裁定全局最优解:独立路由端点 POST /login/ticket(事件取 OpenId 链路"票 → token1"前端兑换面)+ 共享编排 IFederatedLoginOrchestrator(code 通道与票据通道统一委托——P1-1 UId 直读/映射/建号 fallback,接口不变)+ IExternalTicketLoginService 验票(P1-3 统一 TICKET_INVALID/P1-2 仅 null-claimant 票/P2-4 强制频控 ext:ticket:{ip});测试 177 用例全绿(146→177 +31)) + V0.10.1(2026-10-20 契约键名双收——2be7bb9 起:请求 DTO 双收 snake_case 文档键别名 + TokenResponse 双发 camelCase/snake_case 键并存,测试 181 用例全绿) + V0.12.0(2026-10-25 端点契约化 B3a/B3b——MapGenerated 生成化,Oracle1 §9.18/9.19 裁定实施,破坏性:错误体 ErrorResponse→RFC 9457 ProblemDetails 信封(errorCode 值存活)/logout 204→200/grants ?app_id→?appId;9 门面契约下沉(DTO 首参 + 类型化异常 ErrorCode 覆写 + LoginResult 删除)+ 11 端点 [ApiExpose] + DeclareEndpoints+MapGenerated(11 手写 handler 删除)+ EndpointContracts.cs 13 DTO 迁主包;框架 B4 三连修 v4.10.82/83 + 门控精化 v4.10.84;测试 198 用例全绿(+errorCode 存活 + 门控锁定 2)) $(System.Collections.Specialized.OrderedDictionary[AuthCenter]) README 指南
Federation V0.15.0 认证体系三层架构的对外连接层壳(2026-10-09 TrustCenter 剥离后重定位;原 V0.2.0 泛内核形态随信任内核迁出)——平台 IdP 连接 + 编排 + /feberation/* 端点:ISsoChannel 集合编排(ISsoLogin/ISsoChannelFactory,I2-1 契约迁 Federation.Abstractions)/ FederationWebExtension(POST {prefix}/login[ /{channelId}]/GET {prefix}/jwks/POST {prefix}/event/{channelId}——TKWF:Federation:Web 配置分层)/ 多通道设施(IChannelRegistry 系列 + SsoChannelRegistryEntity DB 动态权威 + ChannelAlias 双键)/ ExternalIdpAuthenticator 外部 IdP 借道桥接(AuthCenter.Abstractions 契约,委托平台库通道非双实现——根因修复)/ profile API(scope 强制 + 审计)/ 事件回复链(EventOrchestrator 双桶迭代 + IEventReplyHandler 集合 + EventReplyHandlerBase 签票基类——V0.9.0:TestEventReplyHandler 删除迁移平台层,handler 迭代权统一编排器(W3 绑定桶对微信可达));经 TrustCenter.Abstractions 契约调签发 token2/accesscode(合法 L2);配置节拆分为 TKWF:Federation:ChannelRegistry/:Web(签发配置迁 TKWF:TrustCenter);历史版本线 V0.2.0(E4 密钥抽象)/V0.3.0(多通道 Phase 1)/V0.4.0(Phase 2/3 DB 动态权威 + ChannelAlias)/V0.7.0(对外路由命名空间)/V0.8.x(外部身份联邦 E3)已发布;V0.11.0(Iteration 2 渠道关注关系域,待发布):关注域(IFollowStateService + FollowEventEntity/FollowStateEntity + FollowChangedEvent 域事件——仅状态变化发布)+ 编排记录在后(R3)+ 免登入口(ILoginEntryService + TKWF:Federation:LoginEntry)+ 传输/语义分层(ChannelInboundContext/ChannelEvent/ChannelCapabilities) $(System.Collections.Specialized.OrderedDictionary[Federation]) README 指南
Federation.Abstractions V0.5.0 联邦通道编排契约抽象包(V0.1.0 首发——2026-10-18 ④ 裁定:通道编排契约自 Federation 主包收口独立契约包,对齐 AuthCenter.Abstractions/TrustCenter.Abstractions 先例):IChannelRegistry(按 ChannelId/alias 选区)/IChannelSource(平台库投影统一 ChannelConfig)/ChannelConfig(公共列 + Extra 扩展字典)/IEventReplyHandler(事件回复处理器——消费方实现 first-non-null-wins)/IEventOrchestrator(事件编排门面——平台回复 → handler 迭代 → null 兜底);namespace 保持 TKWF.Ext.Federation(跨程序集同 namespace——消费方零 using 迁移,仅 csproj 改引);最小依赖 TKWF.Domain(IDomainService)+ TrustCenter.Abstractions(SsoChannelEventContext/EventReplyResult——纯 BCL 契约包);零实体零 SG1 零 Initializer;实现(CompositeChannelRegistry/StaticChannelRegistry/EventOrchestrator)留 Federation 主包;9 平台库 + WeChatOperations 改引本包(替代直引 Federation 主包);V0.2.0(待发布——Iteration 2 契约收口):ISsoChannel.cs 自 TrustCenter.Abstractions 迁入(通道契约归属纠正,FA 解除 TC 引用)+ 关注域契约(IFollowStateService/IFollowChannelQuery/FollowChangedEvent/ILoginEntryService+FederationLoginEntryOptions)+ ChannelEvent 系列/ChannelCapabilities([Flags] DIM None fail-closed)/ChannelInboundContext(替代 SsoChannelEventContext) $(System.Collections.Specialized.OrderedDictionary[Federation.Abstractions]) README —(并入联邦互联指南)
TrustCenter V0.3.3 认证体系三层架构的应用间信任中枢(纯信任内核——2026-10-09 自 Federation 剥离,2026-10-10 用户裁定 SymmetricKeyProviderKeys.TrustCenter 等框架组适配后统一发布):应用注册(SsoClientEntity origin 白名单 + scope + AES-GCM credential + per-channel HMAC + RegisterAsync 返回一次性明文 client_secret(V0.2.2——OAuth 动态注册 RFC 7591,注册契约缺口修复))/ token2 手写 ES256 独立密钥域 + kid 轮换 + JWKS(与 AuthCenter RS256 完全独立)/ accesscode(120s 原子 CAS + SHA256 + PKCE + 安全数据投递增强——Payload AES-GCM 密文落库(容量 ~4068) + ExpectedClaimant 进原子 CAS 无 TOCTOU + Issue/Peek/Redeem/CleanupExpiredAsync)/ ISsoChannel 契约定义(契约在此、编排在 Federation);TrustCenter.Abstractions 契约包(ISsoChannel/IToken2Service/IAccessCodeService + DTO,零实体零 SG1);信任内核纯签发零编排(Federation 连接层经契约调签发);内网中枢零外部协议库引用;配置 TKWF:TrustCenter 节;表 TKWF_SsoClient/TKWF_AccessCode $(System.Collections.Specialized.OrderedDictionary[TrustCenter]) README 指南
Federation.WeChat V0.16.1 微信公众平台连接器(大使馆/平台网关库——纯库无装配无持久化,方向对外接微信 IdP):WeChatApiClient 出站(access_token L1 缓存+并发锁+提前 5min 刷新+code→openid+sns/userinfo 降级)+ WeChatOptions(TKWF:Federation:WeChat 节,凭证自持 Oracle P2-4)+ 双通道(WeChatOauthChannel wechat_oauth / WeChatEventChannel wechat_event + WeChatEventCrypto 事件验签——信任根 msg_signature+AES 一票否决)+ 事件回复 Handler 三件套(V0.4.0):WechatEventReplyHandlerBase 平台基类(MsgType/Event 二级分发 + 图文工具多图文 + 协议门控 unsubscribe/MASSSENDJOBFINISH 禁回复)+ WechatTemplateEventReplyHandler(模板驱动,消费方显式注册)+ WechatProbeEventReplyHandler(探针,ProbeEventReplyHandlerEnabled 默认 false 门控)+ WeChatEventChannel 编排放权(V0.4.0)(HandleEventAsync 验签解密富化 __decrypted_xml 返回 null——被动回复 XML 信封上移平台基类)+ V0.4.1 增强:菜单出站 3 API(CreateMenuAsync/GetCurrentSelfMenuInfoAsync 结构化 poco/DeleteMenuAsync——自实现不引 Senparc)+ IWeChatCredentialResolver 凭证解析可插拔契约(缺省 Options 实现 DI 注册,扩展 DB 实现两源并存)+ template 多图文升级(NewsReplyTemplateV2 articles 数组优先 + 单图文兼容)+ AddWeChatFederationChannels() 注册;+ V0.4.2(RawXml 逃逸口):WechatReplyPayload 增可选 RawXml 字段(第三位置可选参——完整微信被动回复 XML 原样透传跳过 text/news 重组(防双重信封——SyncProxy 下游自组信封 XML 原样回复预备);优先级 RawXml > News > Content,默认 null 存量零破坏);不引 AspNetCore(端点归装配层)、零持久化零 Store;测试 100 用例全绿 $(System.Collections.Specialized.OrderedDictionary[Federation.WeChat]) README 指南
Federation.WeChat.MessageGateway V0.1.1 微信公众号消息网关核心判定运行库(纯逻辑零实体零持久化零 DI 零 DB——用户三部分分层裁定 ①,对齐 DataPort/Tagging 运行库提炼先例):WeChatMessageRouteRuleMatcher 路由规则判定(MatchMode None/Exact/Contains + MsgType 通配/逗号分隔多值(V0.1.1 消息类型多选)/Event 仅 event 参与 + SortOrder 升序首命中)/ WeChatMessageIdempotencyKeyBuilder 幂等键规范化(msg:/evt: 前缀类型隔离 + ChannelId 入键——消息 MsgId / 事件 FromUserName+CreateTime 双形态)/ WeChatMessageForwardDecider 转发决策与降级链(LocalOnly/AsyncCopy/SyncProxy/PreprocessSync 决策 + 失败降级 LocalFallback——降级链步进 LocalRender→Template→DefaultReplyText)/ WeChatCircuitBreaker 熔断状态机(关→开→半开→关,每 Endpoint 独立计数,默认阈值 3 / 开窗 60s)/ 常量(WeChatMessageTypes/WeChatMessageMatchModes/WeChatMessageForwardModes/WeChatEndpointAuthTypes);依赖 TKWF.Federation.WeChat 协议类型(WechatEventContext/WechatReplyPayload)单向;被领域扩展 TKWF.Ext.WeChatOperations V0.3.0 消费(② 装配);测试 57 用例全绿 $(System.Collections.Specialized.OrderedDictionary[Federation.WeChat.MessageGateway]) README —(并入 WeChatOperations 指南)
WeChatOperations V0.6.1 微信公众号运营扩展(实体型——V0.4.0 设计缺口修复:客户端 DTO 生成链路根治 + 网关 REST 端点 + 总开关 DB 化):8 实体 SG1 数据底座(WeChatChannelConfigEntity 凭证 AES-GCM 密文/MaterialEntity 素材库/ReplyRuleEntity 全消息类型回复规则(SceneType Subscribe/Keyword/Click/Image/Voice/Video/ShortVideo/Location/Link/Scan/Default)/SubscriptionStatEntity 订阅统计/MenuSnapshot+MenuVersion 菜单基准与版本/InteractionLog+MenuPublishLog 日志审计)+ 6 门面(IChannelConfigService/IMenuService 发布链(快照+版本+审计事务)/IReplyRuleService/IMaterialService/ISubscriptionStatService/ILogQueryService)+ WeChatOperationsReplyHandler(继承平台基类二级分发 14 分支——欢迎语/关键词/Click 映射/全消息类型/Scan + 内部组合 template 兜底(Oracle P0 选项 A)+ 订阅统计 + 交互日志)+ 两源并存(DB 权威 + Options 降级——DbWeChatCredentialResolver/DbWeChatChannelSource Insert(0) 前置)+ WeChatOperationsWebExtension(13 端点 + 配置分层 + [RequirePermission] 权限标注)+ 不走动态加载(编译期静态注册);+ V0.2.0 网关模块(消息网关核心判定消费运行库 Federation.WeChat.MessageGateway——MessageGatewayService 门面编排:路由判定/幂等键/转发决策与降级链/熔断状态机 + 网关 Options(TKWF:WeChatOperations:Gateway 节——GatewayEnabled 默认 false/幂等保留 7 天/待处理超时 5 分钟/重试 3 次);+ V0.2.1 对齐迭代(DMP-Lite 接口对齐 P0 缺口四项——MessageRouteRuleEntity.Name 规则显示名 / IMaterialService.GetReferencesAsync 素材引用反查(跨 ReplyRule 聚合 MaterialReferenceDto 清单)/ IMenuService.GetClickKeysAsync 菜单树递归收集 click key(自动生成映射行)/ WeChatOperationsOptions.MessageBusinessEnabled 消息业务总开关(默认 true——关闭停发本地回复统一维护提示,转发网关不受控));+ V0.3.0 P1 二期对齐四项(消息类型多选(MsgType 逗号分隔多值 + matcher 适配——替代 P1-5 单值方案)/ 来源场景维度(SubscriptionStat.Source + 唯一约束扩 (ChannelId,StatDate,Source) + RecordAsync/GetTrendAsync 增参 + WeChatSubscriptionSources)/ 交互日志耗时(InteractionLog.DurationMs + Stopwatch 计时)/ SyncProxy/PreprocessSync 真透传(DownstreamForwardClient.SendRawXmlAsync 完整 XML 透传 → WechatReplyPayload.RawXml 原样接管回复防双重信封 + RouteSyncProxyAsync 熔断/Timeout/Fail 降级 + IsValidReplyXml));GUI 阶段二交 DMP-Lite(方案 §八)+ V0.3.1 P2 对齐迭代四项(状态卡聚合 IWeChatOperationsStatusService(DMP-Lite 5.8)/ 匹配过程明细(InteractionLog.MatchTraceJson 逐行推演——DMP-Lite 5.6 §4)/ 统计卡聚合(GetSummaryAsync 区间新增/取消/日均/净增/累计增长率——DMP-Lite 5.7 §2)/ 超时单位统一(DownstreamEndpointDto.TimeoutMs 派生)) + V0.4.0 设计缺口修复(DMP-Lite 转达四项裁定——① 客户端 DTO 生成链路根治:8 门面实现类 public + [GenerateController] + 接口方法 [ApiExpose(RestRoute/RestMethod)] 锁 /api/wechat-ops/*(SG1b 生成端点 + SG3 客户端 DTO/代理;手写 WeChatOperationsWebExtension/WeChatOperationsEndpointOptions 删除——破坏性)+ 安全 wire DTO 化(SaveChannelRequest/SaveEndpointRequest/SetGatewayEnabledRequest 凭证明文 body 传输)② 网关 REST 端点补全:/gateway/* 9 端点(rules×3 + endpoints×3 + status + enabled + ListForwardLogsAsync;RouteAsync 排除)③ 消息业务总开关 DB 化:FeatureManagement 消费(WeChatOperationsFeatureDefinitionContributor 声明 + Options 启动默认 + DB 权威双源——IFeatureManager.SetValueAsync 运行时切换)+ [TKWFExtensionDependency] 补声明);测试 143 用例全绿;V0.5.0(待发布——Iteration 2 订阅统计派生改造 I2-10):删 SubscriptionStatEntity(12→11 实体,7 运营 + 4 网关)、GetTrendAsync→IReadOnlyList<SubscriptionStatPointDto>(Date/NewFollows/Unsubscribes/NetGrowth/Source 委托关注域 IFollowStateService.GetDailyStatsAsync)、handler 删写路径(统计口径与关注域事件日志一致)、REST 形状变化(SubscribeCount→NewFollows 等 4 键名)+ SG3 重生成 + R3 附条件语义(DedupeKey 冲突同事务回滚——接受的已知代价);测试 143+2 全绿 $(System.Collections.Specialized.OrderedDictionary[WeChatOperations]) README 指南
Federation.QQ V0.4.1 QQ 互联连接器(大使馆/平台网关库——出站-only 精简形态,N3 落地):QqApiClient 出站(code→access_token→/me→openid 一次性链 + redirect_uri 一致性 P1-4 + fmt=json 强制 + JSONP 剥壳兜底 + 用户级 token 不缓存 P1-5 + GetMeAsync unionid 开关 + get_user_info ret/msg 裁剪)+ QqOptions(TKWF:Federation:QQ 节,凭证自持 P1-1)+ QqOauthChannel(qq_oauth——code 缺拒/redirect_uri 缺拒/AuthLevel=2/不感知 state P1-3,external_uid 恒=openid P1-2)+ AddQqFederationChannels() 注册(TryAddEnumerableConstructible ADR92);信任根降级(出站换取链——QQ 无入站回调,P5 不适用);测试 16 用例全绿;不引 AspNetCore、零持久化零 Store $(System.Collections.Specialized.OrderedDictionary[Federation.QQ]) README 指南
Federation.Alipay V0.3.1 支付宝开放平台连接器(大使馆/平台网关库——出站-only + RSA2 双向签名,N4 落地):AlipayApiClient 出站(gateway.do 统一网关 RSA2 签名调用——alipay.system.oauth.token auth_code→user_id(无 biz_content/code 顶层)+ alipay.user.info.share(auth_token 顶层字段,snake_case 裁剪)+ refresh 续期封装 + BuildAuthorizeUrl)+ AlipaySignService(RSA2 双向签名核心——请求签名委托框架 AlipaySignUtil + 同步响应自实现验签(保留原始 body 防 JSON 顺序差异,FAIL_SIGNATURE 拒信任)+ 通知验签 rsaCheckV1 等价)+ AlipayOptions(TKWF:Federation:Alipay 节——ChannelId/AppId/PrivateKeyPath/AlipayPublicKeyPath PEM 路径,凭证自持 P2-4,生产 fail-fast 缺钥拒)+ AlipayOauthChannel(alipay_oauth——code 缺拒/redirect_uri 缺拒(N4 P1-2)/AuthLevel=2/不感知 state P1-1,external_uid=user_id)+ AlipayChannelSource(组件 8.5 多通道投影)+ AddAlipayFederationChannels() 注册(ADR92);信任根强双向签名(出站换取链 + 响应验签);测试 12 用例全绿;不引 AspNetCore、零持久化零 Store $(System.Collections.Specialized.OrderedDictionary[Federation.Alipay]) README —(并入联邦互联指南)
MFA V0.2.1 多因素认证(TOTP RFC 6238 自研零第三方 + 短信验证码双方法:绑定/解绑 + 挑战-验证流(一次性 TTL 票据 + 单次消费防重放)+ 尝试频控(内存滑动窗口)+ 恢复码;独立扩展零依赖——短信渠道经消费方 IMfaSmsSender 注入,登录编排归消费方;secret AES-GCM 密文落库)+ V0.2.0(E4 密钥管理抽象(CPM 4.10.61)——删 MfaSecretKeyStore 静态类,TotpMfaMethod ctor 注入 keyed ISymmetricKeyProvider(SymmetricKeyProviderKeys.Mfa,消费点即注入点——修正 Initialize/消费跨类分裂);删 MFA 测试反射 ResetMfaSecretKeyStore(GetField("_key"))改注入式 internal Reset;修正 MfaSecretEntityDataService 陈旧注释;AES-GCM 单段规范格式) $(System.Collections.Specialized.OrderedDictionary[MFA]) README 指南
Navigation V0.1.2 菜单数据模型 / 贡献机制 / 权限过滤(从主框架迁出) $(System.Collections.Specialized.OrderedDictionary[Navigation]) README 指南
Navigation.Abstractions V0.1.0 导航契约抽象(IMenuContributor/MenuItemDefinition/MenuConfigurationContext——ADR48 D7 依赖倒置,零框架引用纯 BCL) — — —(并入 Navigation)
AuditLogging V0.5.1 审计日志 FreeSql 存储 + SG1 实体 + 查询 API + 统计聚合与清理(V0.3.0)+ 管理 API(V0.4.0:[GenerateController] + ExcludeMethods 排除含 ArgumentsJson 标准 CRUD + 5 REST 端点) + 聚合 SQL 下推(V0.4.2:TopN 经 GroupCountAsync——V4.10.39 分组聚合 API) $(System.Collections.Specialized.OrderedDictionary[AuditLogging]) README 指南
Settings V0.3.1 全局/用户级配置持久化 + 分层读取 $(System.Collections.Specialized.OrderedDictionary[Settings]) README 指南
BlobStoring V0.3.0 二进制大对象本地文件系统存储 + FreeSql 记录 + FileStream 流式下载(V0.2.0) $(System.Collections.Specialized.OrderedDictionary[BlobStoring]) README 指南
Emailing V0.3.0 SMTP/MailKit 邮件发送 + FreeSql 发送记录 + 指数退避重试(V0.2.0);契约抽取至 Emailing.Abstractions(ADR48 D7) $(System.Collections.Specialized.OrderedDictionary[Emailing]) README 指南
Emailing.Abstractions V0.1.1 邮件发送契约抽取(IEmailSender/EmailMessage——ADR48 D7 依赖倒置,Notifications 等消费方复用) — — —(并入 Emailing)
DataDictionary V0.3.0 数据字典集中管理(定义 + 项 + 按编码查询)+ VEntity 读模型联邦(V0.2.0:vw_DictionaryItemView JOIN Definition→Item 单查询下推——GetOrLoadAggregateAsync 两步骤一,"定义存在无项"语义保留,树语义保护经门面) $(System.Collections.Specialized.OrderedDictionary[DataDictionary]) README 指南
Tagging V0.4.6 标签存储扩展(标签算法已回归 TKW.Framework.Utility.Tags,ADR52 瘦身;V0.4.0 AC 自动机 DictMatch 批量匹配 + Options 配置接入);+ 聚合 SQL 下推(V0.4.3:GetFrequencyAsync/GetDimensionDistributionAsync 经 GroupCountAsync/GroupByAsync——V4.10.39;GetTrendAsync 保留内存分桶) $(System.Collections.Specialized.OrderedDictionary[Tagging]) README 指南
PrintTemplates V0.3.0 打印模板引擎与版本化(Scriban 沙箱渲染 + Draft/Active/Archived 生命周期) $(System.Collections.Specialized.OrderedDictionary[PrintTemplates]) README 指南
Metrics V0.2.1 业务指标计算引擎(规格文档驱动复合指标计算——复购率/留存/同期群/漏斗/时段桶/比率;核心计算在 TKW.Framework.Utility.Metrics)+ 指标结果持久化(V0.2.0:IMetricResultStore 契约 + MetricResultMapper 标准化行映射——实体归消费方 SG1 接线) $(System.Collections.Specialized.OrderedDictionary[Metrics]) README 指南
Analytics V0.1.0 业务分析服务(spec 文件驱动 + flint 单一真相 JsonDocument 透传——核心 TKW.Framework.Utility.Analytics 零依赖 + 本包 IAnalyticsQueryService 门面 4 方法;manifest 状态校验 + domain/specKey 路径安全正则) $(System.Collections.Specialized.OrderedDictionary[Analytics]) README 指南
Dashboard V0.1.2 仪表盘数据服务(Metrics 展示层——JSON 描述符 + Widget 数据查询;不引入图表库) $(System.Collections.Specialized.OrderedDictionary[Dashboard]) README 指南
DataPort V0.1.4 数据导入导出(三层架构——核心运行库+MiniExcel Provider+SG1 持久化;FileHash 幂等) $(System.Collections.Specialized.OrderedDictionary[DataPort]) README 指南
Notifications V0.6.3 通知中心(站内通知收件箱+订阅+事件驱动通知+多通道抽象;第一个事件总线消费者);GetListAsync(name) VEntity 跨表 JOIN(V0.1.0);+ 多通道路由 UseChannels/Email(V0.2.0);+ 用户偏好路由 + 逐用户权限门控(V0.3.0,委托 Permissions v0.9.0 IPermissionBatchChecker);+ SignalR 实时推送通道(V0.4.0,独立包 TKWF.Ext.Notifications.SignalR,服务端非 UI);+ REST 直接暴露(V0.5.0:UserNotificationViewQueryService——GET /api/notifications/inbox 仅本人 + name 可空,VEntity DTO 一等公民含 Name/Severity/DisplayName) $(System.Collections.Specialized.OrderedDictionary[Notifications]) README 指南
Notifications.SignalR V0.2.0 通知中心 SignalR 实时推送通道(独立包——Hub 类型锚 + SignalRNotifier best-effort 推送 + 端点映射;FrameworkReference 共享框架零 NuGet;服务端非 UI,前端归消费方)+ Web 装配钩子(v4.10.45:NotificationsHubWebExtension——AddSignalR D6 内聚 + MapHub,旧 MapTkfwNotificationsHub 删除) $(System.Collections.Specialized.OrderedDictionary[Notifications.SignalR]) —(并入 Notifications) —(并入 Notifications 指南)
BackgroundJobs V0.4.1 后台任务持久化增强(执行历史 JobExecution + 业务结果 JobResult 追踪 + 历史清理任务 V0.2.0(RetentionDays 启用)) $(System.Collections.Specialized.OrderedDictionary[BackgroundJobs]) README 指南
BackgroundJobs.Quartz V0.1.1 Quartz AdoJobStore 一键封装(UseTkfwAdoJobStore 12 表自动建表/集群配置) $(System.Collections.Specialized.OrderedDictionary[BackgroundJobs.Quartz]) README —(并入 BackgroundJobs)
HealthCheck V0.3.0 系统健康探测(net10 内置 HealthChecks + /health 端点 + 内置 DB 探针 AddDatabaseHealthCheck<T>(V0.2.0,IEntityReadOnlyDAC 红线合规路径))+ Web 装配钩子(v4.10.45:HealthCheckWebExtension——fluent 探针收集 + MapHealthChecks,旧 AddTkfwHealthChecks/MapTkfwHealthChecks 删除) $(System.Collections.Specialized.OrderedDictionary[HealthCheck]) README 指南
RateLimiting V0.3.0 Web 层限流接线(ASP.NET Core AddRateLimiter + IP/用户分区 + 429/Retry-After;与 Domain [RateLimit] 双层防护)+ Web 装配钩子(v4.10.45:RateLimitingWebExtension——AddRateLimiter 展开 + UseRateLimiter,旧 AddTkfwRateLimiting 删除;标注式 RequireRateLimiting 仍需消费方 BeforeRouting 显式 UseRateLimiter) $(System.Collections.Specialized.OrderedDictionary[RateLimiting]) README 指南
SecurityLog V0.4.0 安全日志(登录/登出/改密/重置/锁定/注册/挑战事件 + IP/UA/结果 + 异常检测聚合 + 保留天数清理(V0.2.0) + 契约拆包(V0.3.0——公开契约迁 SecurityLog.Abstractions,命名空间不变) + 聚合 SQL 下推(V0.3.1:TopN 经 GroupCountAsync——V4.10.39 分组聚合 API)) $(System.Collections.Specialized.OrderedDictionary[SecurityLog]) README 指南
SecurityLog.Abstractions V0.1.1 安全日志契约抽象(ISecurityLogStore/ISecurityLogQueryService/ISecurityLogAnalyticsService + DTO/Options——ADR48 D7 依赖倒置,Account 消费方复用) — —(并入 SecurityLog)
Approval V0.4.0 轻量审批引擎(流程定义/审批实例/审批任务三实体 + 状态机 + 或签/会签 + 委派/加签/抄送/超时自动处理(v0.2.0)+ 完成事件回调;不依赖外部工作流引擎) $(System.Collections.Specialized.OrderedDictionary[Approval]) README 指南
OrganizationUnit V0.5.0 组织单元(树形部门/团队/分组 + 物化路径 Level/Path + 循环防护/删除保护 + 用户关联 + 事务包裹)+ VEntity 化/下推(V0.2.0:vw_UserOrganizationUnitView JOIN OU→OUUser 单查询 + GetSubTreeAsync/GetAncestorsAsync 单表 SQL 下推(精确前缀/Code IN)+ 用户归属双模式) $(System.Collections.Specialized.OrderedDictionary[OrganizationUnit]) README 指南
Calendar V0.4.0 日历/排程(日历+事件 CRUD + 重复规则子集(Utility 收纳:DAILY/WEEKLY/MONTHLY/YEARLY + 月末钳制 + 绝对索引)+ occurrence 查询/合并 + UTC 契约) $(System.Collections.Specialized.OrderedDictionary[Calendar]) README 指南
FileManagement V0.4.1 文件管理(目录树 + 文件元数据 SHA256/去重 + 文件版本化 + 配额(v0.2.0) + 用户级配额(v0.3.0:OwnerId 归属维度 + 所有权保留语义) + 并发上传竞态加固(v0.3.0:主表 UX 约束败者重查按内容决策——同内容幂等 / 不同内容新版本) + 上传 10 步安全链(防穿越/白名单/大小/ContentType 服务端推导)+ 依赖倒置 BlobStoring.Abstractions) $(System.Collections.Specialized.OrderedDictionary[FileManagement]) README 指南
BlobStoring.Abstractions V0.1.1 Blob 存储契约抽取(IBlobStorageService/BlobInfo/BlobStoringOptions——ADR50 L2 依赖倒置,FileManagement 消费) — — —(并入 BlobStoring)
FeatureManagement V0.4.6 功能管理/特性开关(接口判定编译期定义(v4.10.31 A+ 阶段 3)+ Provider 链分层值(v0.2.0 扩展点)+ IFeatureChecker 实现(接入 [RequireFeature])+ 复杂 ValueType 类型化读写(v0.3.0)+ 变更事件分布式广播(v0.3.0)+ 管理 API) $(System.Collections.Specialized.OrderedDictionary[FeatureManagement]) README 指南

列说明:README = 扩展技术规范(随 NuGet 发布,位于 _Framework/{扩展名}/);指南 = 使用指南(公开文档,位于 docs/{扩展名}/)。Permissions.Abstractions/Validation、SecurityLog.Abstractions、Account.Abstractions、Navigation.Abstractions 无独立文档,详见对应主扩展的 README 与指南。

版本口径(2026-10-26 固化):本表"版本"列 = 已发布 tag(git tag 按包名前缀 {Package}/vX.Y.Z 取最新,权威源);打 tag 后须同步本表 + _Framework/{扩展名}/README.md + docs/变更记录.md。机器可读清单:docs/versions.json(build/gen-versions.ps1 从 git tag 生成,55 包 + 公共 v tag);功能线领先行用双值写法(如 AuthCenter V0.12.0(功能线)/已发布 v0.10.1)。发布检查清单见 docs/目录结构与版本管理规则.md §3.2/§3.3。

受影响面定向(2026-10-25——AuthCenter V0.12.0 端点契约化 B3a/B3b,L1):AuthCenter 198 用例全绿(181→198:+17——errorCode 存活断言 1 + DeclareEndpoints 门控锁定 2 + 既有适配 14)+ Federation 119 全绿 + WeChatOperations 143 全绿;双模式复验(DLL refs + NuGet 正式 4.10.84)slnx 构建 0 错误;框架 Domain.SG 297 + ApiService.SG 121 全绿;扩展 CI 40118994339 success;全量回归待发布前 L2。 受影响面定向(2026-10-20——Iteration 2 渠道关注关系域,L1):Federation 114 用例全绿(79→114:+35 关注域实体/门面/编排记录在后/域事件/免登入口)+ Federation.WeChat 110 全绿(100→110:+10 EventType 归一/wechat. 前缀 Attributes/IFollowChannelQuery 反查/Capabilities 声明/{ticket} 免登)+ WeChatOperations 143 全绿(+2 派生改造适配——删 SubscriptionStatEntity 委托关注域);slnx 构建 0 错误(L0 编译门);全量回归待发布前 L2。 受影响面定向(2026-10-19——AuthCenter V0.10.0 票据 SPA 兑现迭代,L1):AuthCenter 177 用例全绿(146→177:+31——FederatedLoginOrchestratorTests 8 + ExternalTicketLoginServiceTests 9 + 端点冒烟 5 + 配置断言 2 + 既有适配 7)+ Federation 79 全绿(事件链签票→兑现闭环关联方);slnx 构建 0 错误(L0 编译门);全量回归待发布前 L2。 全量 2343 测试全绿(43 测试项目 / 0 失败 0 跳过)——2026-10-27 CPM lockstep 4.10.85→4.10.87 双模式复验:NuGet 模式(-p:UseLocalFw=false,13 包全解析 4.10.87)执行 L2 全量回归 + DLL 模式(refs 4.10.88-preview)slnx 构建 0 错误;历史基线演进链(2019→2098→2195→2206→2220→2233→2343)见 docs/变更记录.md。


仓库定位

项 说明
主框架 _TKWF/(TKW.Framework 领域框架)
本仓库 TKWF 业务扩展包(TKWF.Ext.*)——独立版本,与主框架版本无关
引用模式 扩展经 PackageReference 引用主框架发布的 NuGet 包(TKWF.Domain 等,CPM 集中 Directory.Packages.props;2026-09-15 迁移——独立构建,消费方视角与 NuGet 模式一致)
版本管理 MinVer 自动管理(git tag 即版本);各扩展独立版本(各打各的 tag,命名空间前缀如 Identity/v0.1.0)

目录结构

_TKWF.Extensions/
├── _Framework/                     # 扩展源码(每个扩展一个项目)
│   ├── Permissions/                 # 权限扩展(V0.7.0:定义/检查/存储/管理 API/Admin.All)
│   ├── Permissions.Abstractions/    # 权限契约抽象(ADR48 D7 依赖倒置)
│   ├── Permissions.Validation/       # PERM001 编译期校验 Analyzer(V0.8.0,扩展侧)
│   ├── Identity/                     # 用户 + 角色 + 用户角色分配 + 凭据验证
│   ├── Account/                      # 账户锁定 + 密码重置流程(主框架缺口补齐)
│   ├── Navigation/                  # 菜单数据模型 + 贡献机制 + 权限过滤
│   ├── AuditLogging/                # 审计日志 FreeSql 存储
│   ├── Settings/                    # 设置管理 FreeSql 存储 + 分层读取
│   ├── BlobStoring/                 # 二进制存储(本地文件系统 + FreeSql 记录)
│   ├── Emailing/                    # SMTP/MailKit 邮件发送(V0.2.0:指数退避重试)
│   ├── Emailing.Abstractions/       # 邮件发送契约(IEmailSender——ADR48 D7 依赖倒置)
│   ├── DataDictionary/              # 数据字典集中管理
│   ├── Tagging/                     # 标签存储扩展(算法已回归 TKW.Framework.Utility.Tags)
│   ├── Notifications/              # 通知中心(发布/收件箱/订阅 + 多通道路由 + 偏好路由/权限门控)
│   ├── Notifications.SignalR/      # 通知中心 SignalR 实时推送通道(v0.4.0 独立包,服务端非 UI)
│   ├── BackgroundJobs/              # 后台任务持久化增强(执行历史 + 业务结果追踪)
│   ├── BackgroundJobs.Quartz/       # Quartz AdoJobStore 一键封装
│   ├── HealthCheck/                 # 系统健康探测(/health 端点接线 + 内置 DB 探针 v0.2.0)
│   ├── RateLimiting/                # Web 层限流接线(IP/用户分区 + 429)
│   ├── SecurityLog/                 # 安全日志(登录/改密/锁定等安全事件)
│   ├── Approval/                    # 轻量审批引擎(流程定义/实例/任务 + 状态机)
│   ├── OrganizationUnit/            # 组织单元(树形部门/团队/分组 + 用户归属)
│   ├── Calendar/                    # 日历/排程(日历+事件 + 重复规则子集)
│   ├── BlobStoring.Abstractions/    # Blob 存储契约(IBlobStorageService——ADR50 L2 依赖倒置)
│   ├── FileManagement/              # 文件管理(目录树 + 文件元数据 + 版本化/配额 + 上传安全链)
│   ├── Federation/                  # 对外连接层(外交部——2026-10-09 三层化:TrustCenter 剥离后连接层壳,/feberation/* 端点 + 编排 + 桥接 + 多通道设施)
│   ├── Federation.Abstractions/     # 联邦通道编排契约包(IChannelRegistry/IChannelSource/ChannelConfig/IEventReplyHandler/IEventOrchestrator——V0.1.0 ④ 裁定收口,TKWF.Federation.Abstractions)
│   ├── TrustCenter.Abstractions/    # 信任契约包(ISsoChannel/IToken2Service/IAuthorizationCodeService——信任内核契约;面① ISealedTicketService<T> 在主框架 Domain.Ticket,零实体零 SG1)
│   ├── TrustCenter/                 # 信任中心(应用间信任中枢——2026-10-09 自 Federation 剥离,纯信任内核:应用注册/token2/accesscode/ISsoChannel 契约定义)
│   ├── Federation.WeChat/           # 微信公众平台连接器(大使馆/平台网关库——纯库无装配,TKWF.Federation.WeChat)
│   ├── Federation.WeChat.MessageGateway/  # 微信消息网关核心判定运行库(纯逻辑零实体零持久化零 DI——路由判定/幂等键/转发决策/熔断状态机,TKWF.Federation.WeChat.MessageGateway)
│   ├── WeChatOperations/            # 微信公众号运营(实体型——8 实体 + 6 门面 + 事件回复 handler + 生成端点(V0.4.0 `[GenerateController]`),TKWF.Ext.WeChatOperations)
│   ├── Federation.QQ/               # QQ 互联连接器(大使馆/平台网关库——出站-only,TKWF.Federation.QQ)
│   ├── Federation.Alipay/           # 支付宝开放平台连接器(大使馆/平台网关库——出站-only + RSA2 双向签名,TKWF.Federation.Alipay)
│   └── FeatureManagement/           # 功能管理(特性开关——定义收集 + 分层值 + IFeatureChecker)
├── _Tests/                          # 测试(一组扩展一个测试项目)
│   ├── Extension.Permissions.Tests/
│   ├── Extension.Permissions.Consumer/    # 消费方集成验证
│   ├── Extension.Permissions.Validation.Tests/  # Analyzer 单测
│   ├── Extension.Identity.Tests/
│   ├── Extension.Account.Tests/
│   ├── Extension.Navigation.Tests/
│   ├── Extension.AuditLogging.Tests/
│   ├── Extension.Settings.Tests/
│   ├── Extension.BlobStoring.Tests/
│   ├── Extension.Emailing.Tests/
│   ├── Extension.DataDictionary.Tests/
│   ├── Extension.Tagging.Tests/
│   ├── Extension.OrganizationUnit.Tests/
│   ├── Extension.Calendar.Tests/
│   ├── Extension.FileManagement.Tests/
│   ├── Extension.Federation.Tests/
│   ├── Extension.TrustCenter.Tests/
│   ├── Extension.Federation.WeChat.Tests/
│   ├── Extension.Federation.WeChat.MessageGateway.Tests/
│   ├── Extension.Federation.QQ.Tests/
│   └── Extension.FeatureManagement.Tests/
├── docs/                           # 公开使用指南(每个扩展一份)
│   ├── Permissions/权限扩展-使用指南.md
│   ├── Identity/身份管理扩展-使用指南.md
│   ├── Account/账户管理扩展-使用指南.md
│   ├── Navigation/导航扩展-使用指南.md
│   ├── AuditLogging/审计日志扩展-使用指南.md
│   ├── Settings/设置管理扩展-使用指南.md
│   ├── BlobStoring/二进制存储扩展-使用指南.md
│   ├── Emailing/邮件发送扩展-使用指南.md
│   ├── DataDictionary/数据字典扩展-使用指南.md
│   ├── Tagging/标签服务扩展-使用指南.md
│   ├── OrganizationUnit/组织单元扩展-使用指南.md
│   ├── Calendar/日历排程扩展-使用指南.md
│   ├── FileManagement/文件管理扩展-使用指南.md
│   ├── TrustCenter/信任中心-使用指南.md          # 信任中心(应用间信任中枢——token2/accesscode/应用注册/安全数据投递)
│   └── FeatureManagement/功能管理扩展-使用指南.md
├── Directory.Build.props           # TKWFSourceRoot + MinVer + 打包属性
├── Directory.Packages.props         # CPM 集中包版本
├── AGENTS.md                        # 扩展仓库开发规则(AI Agent 与人工开发者必读)
└── TKWF.Extensions.slnx            # 扩展解决方案

扩展设计文档(开发方案/ADR/设计思路)+ 使用指南存放于本公开仓库 docs/(2026-09-15 裁定后新方案落公开仓库;历史方案/审核报告/总览跟踪在主框架私有仓库 _TKWF/docs/03_扩展模块/,渐进迁移)。


架构模式

所有扩展遵循统一架构模式(异常静默 + TryAddScoped + SG1 声明式实体):

扩展项目(net10.0)
├── Entity(partial class + [Table] + [DomainGenerateCode] + FreeSql [Column])
├── Store 抽象 + FreeSql 实现(internal sealed + 异常静默)
├── Manager 门面(internal sealed + 聚合查询)
├── ExtensionInitializer([TKWFExtension] + TryAddScoped 三钩子)
└── README.md(技术规范)

测试项目(xunit.v3 + FreeSql SQLite 内存)
├── ConsumerHostInitializer([TKWFEnabledExtension] 白名单样板)
└── 测试类(Store CRUD + Manager 聚合 + Initializer DI + 异常静默)

测试事务约定:SQLite 物理事务边界 + Noop 事务限制 + PG 测试容器评估见 docs/测试约定-SQLite物理事务与Noop限制.md(2026-10-02,转达登记落地)。

扩展启用(v4.9.85+ 必需)

扩展不再"发现即启用"——消费方须在领域初始化器上显式声明白名单:

using TKWF.Ext.Identity;

[TKWFEnabledExtension(typeof(IdentityExtensionInitializer<>))]
public class MyDomainInitializer : DomainHostInitializerBase<MyUserInfo> { ... }

声明后扩展三钩子(ConfigureServices/ConfigureFilters/InitializeAsync)自动接线。

依赖倒置(ADR48 D7)

扩展间依赖走 .Abstractions(接口/契约),不引用实现项目——L2 门控硬约束(TKWF0022 Error)。

Navigation → Permissions.Abstractions(✅ 合法)
Navigation → Permissions(❌ TKWF0022 Error)

快速开始

消费方引用扩展

NuGet 包模式(消费方推荐——扩展已发布 TKWF.Ext.* NuGet 包):


<PackageReference Include="TKWF.Ext.Identity" Version="0.3.3" />

源码模式(本仓库开发/联调主框架新 API 时):


<ProjectReference Include="..\_TKWF.Extensions\_Framework\Identity\TKWF.Ext.Identity.csproj" />

双模式并存:扩展自身构建用 PackageReference(主框架包);需调试主框架源码新 API 时可临时切源码引用——消费方视角与 NuGet 模式一致。

启用 + 使用

// 1. 白名单声明(v4.9.85+)
[TKWFEnabledExtension(typeof(IdentityExtensionInitializer<>))]
public class MyDomainInitializer : DomainHostInitializerBase<MyUserInfo> { ... }

// 2. 注入 + 使用
public class AuthService(IUserManager userManager)
{
    public async Task<UserEntity?> LoginAsync(string name, string password)
        => await userManager.VerifyCredentialsAsync(name, password);
}

版本管理

MinVer:各扩展包独立版本(git tag 命名空间前缀 + csproj MinVerTagPrefix 对齐,如 Identity/v0.3.2 → 0.3.2)
公共内容(构建基建/无扩展归属):无前缀 v tag(如 v0.8.2)

机制:
- 每个扩展 csproj 设 <MinVerTagPrefix>{扩展名}/v</MinVerTagPrefix>——MinVer 只匹配该扩展自己的前缀 tag,
  各扩展版本完全独立(Permissions 0.9.x 与 Identity 0.3.x 互不影响)
- 扩展 tag 命名:{扩展名}/v{major}.{minor}.{patch}(如 Permissions/v0.9.0、Notifications/v0.3.0)
- 公共内容(Directory.Build.props/构建脚本等无扩展归属的变更):打无前缀 v tag(既有 v0.1.0~v0.8.2)
- 契约包(*.Abstractions)独立 tag:Account.Abstractions/v0.1.0 等,版本与主扩展独立演进
- 与主框架 _TKWF 版本完全独立
Tag 纪律:必须有开发方案 + 审核报告,且征得用户同意

版本一览表口径(2026-10-26 固化,转达登记):
- 发布事实源 = git tag({Package}/vX.Y.Z 前缀,按包取最新);本表"版本"列填已发布 tag 版本
- 打 tag 后必须同步本表(+ _Framework/{扩展名}/README.md + docs/变更记录.md),防止展示层滞后
- 功能线领先于已发布 → 双值写法:Vx.y.z(功能线)/已发布 vA.B.C(实例:AuthCenter V0.12.0(功能线)/已发布 v0.10.1)
- 发布检查清单与详细约定见 docs/目录结构与版本管理规则.md §3.2/§3.3

扩展规划

  • P0(必须):11/11 全部完成 ✅——Identity / Account / Navigation / AuditLogging / Settings / BlobStoring / Emailing / DataDictionary / Tagging / PrintTemplates + Permissions(V0.9.0)。注:Tagging 标签算法已按 ADR52 回归主框架 TKW.Framework.Utility.Tags,扩展保留存储层。
  • P1(推荐):20 扩展已实施(后台任务/功能管理/通知+SignalR/限流/健康检查/安全日志/组织单元/文件管理/审批/导入导出/日历/仪表盘/打印模板/指标/标签存储/数据字典/用户中心/多因素认证/分析服务);剩余 14 项按需推进(OpenIddict/SSO/LDAP/后台服务/安全防护/媒体库/搜索/动态表单/动态字段/工作流/文本模板/报表/文档管理/ApiDocs)。
  • P2(待定):20 项全部按需启用(CMS/支付/订阅/聊天/GraphQL/可观测性/数据分析BI 等)。

NuGet 发布(2026-09-15 + 2026-10-06 增量)

  • 30 包已发布 nuget.org(TKWF.Ext.*,v0.1.x–v0.9.x,依赖主框架稳定包 4.10.24)——经 GitHub Actions + Trusted Publishing(OIDC 免 API key:NuGet/login@v1 + nuget.org policy + NUGET_USER secret)自动发布,CI run 34897984278 30/30 pushed 确认。
  • 2026-10-06 增量发布(run 37439864527 + 37445400545 全绿,AuthCenter/v0.8.0 tag 移绿树 3038d40 触发):AuthCenter 0.8.0(stable)已上架 + AuthCenter.Abstractions 0.1.1-preview.0.19 / Federation 0.2.1-preview.0.12 首发 + 全部已发布扩展新 preview(--skip-duplicate 幂等 no-op)。
  • ✅ TKWF.Federation.* 平台库(7 个)已全部发布(run 37445400545,0.1.1-preview.0.1——WeChat/DingTalk/Oidc/Google/Microsoft/WeCom/QQ;QQ 骨架 preview 首发,协议在 N3 V0.1.0 稳定版落地后将覆盖)。⚠️ 阻塞曾因 nuget.org Trusted Publishing 策略仅覆盖 TKWF.Ext.* 前缀(403 Forbidden)——用户已更新策略为 TKW.* + TKWF.* 全局前缀,权限更新后重触发补齐。Permissions.Validation(Analyzer)IsPackable=false 不发布。
  • 后续版本发布:各扩展打 {扩展名}/v{x.y.z} tag(patch bump 指向目标 commit)→ push tag 即触发 CI 全量重建 + 发布(--skip-duplicate 幂等)。
  • ✅ TKWF.Ext.Federation 主包已废弃并全量 unlist(2026-10-10)——10 版本(0.2.1-preview.0.12 ~ 0.5.0,含连接层壳版)已 unlist(nuget.org 搜索不可见、flatcontainer 保留兼容既有引用);消费方改引 TKWF.Ext.TrustCenter 新线 + 8 平台库 TKWF.Federation.{平台}(保留不 unlist,2026-10-10 已发 v0.2.2 ×7 + Alipay v0.1.1)。
  • ✅ TKWF.Ext.TrustCenter V0.1.0 已发布(2026-10-10:框架组 v4.10.70 并入 SymmetricKeyProviderKeys.TrustCenter(C11 第 5 扩展边界)→ CPM 4.10.70 lockstep + 删过渡类 + 切主框架常量 → 全量 1913 用例 0 失败;TrustCenter/Abstractions/Federation v0.5.0/AuthCenter v0.9.2 四 tag + 8 平台库 tag 已发布 + CI 全绿 + nuget.org 实证上架)。
  • ✅ V0.4.0 设计缺口修复 + ④ 契约包联动发布(2026-10-18,12 tag 全绿)——WeChatOperations/v0.4.0(①②③ 设计缺口修复:客户端 DTO 生成链路根治 + 网关 REST 端点 + 总开关 DB 化)+ Federation.Abstractions/v0.1.0(④ 新契约包首发——通道编排契约收口独立包)+ Federation/v0.10.0(契约迁出后主包新版本)+ 8 平台库新版本(Federation.WeChat v0.5.0 / QQ v0.4.0 / DingTalk v0.4.0 / WeCom v0.4.0 / Oidc v0.3.0 / Google v0.3.0 / Microsoft v0.3.0 / Alipay v0.3.0——依赖拓扑切 Abstractions);逐个 tag push(多 tag 单命令会丢事件先例)→ 12 个 CI run 全部 success(含新契约包 Abstractions publish)。
  • ✅ v4.10.76 HttpAuth 匿名端点排除机制收入(2026-10-15,ADR108)——主框架 v4.10.76(HttpAuthenticationMiddleware 锚点后移 AfterRouting 读端点 IAllowAnonymous 元数据——扩展声明 AllowAnonymous 即自动放行,消费方零配置;SG1b 生成器 AllowAnonymous=true → .AllowAnonymous() + 接口级 fallback)+ 扩展侧 CPM lockstep 4.10.76(12 包)+ 各 Web 扩展匿名端点自查零适配;消费方旧版手动 HttpAuth.ExcludedPathPrefixes.Add("/feberation") 冗余(保留无害);详见 docs/HttpAuth匿名端点排除机制-开发方案.md。
  • ✅ Federation 系列持续发布(2026-10-21~27,Iteration 2 关注域 + 微信测试反馈增强)——Federation/v0.11.0~v0.15.0(I2 渠道关注关系域 + 复查修复 + 审核 P1/P2 + 测试端点 HTML 化)+ Federation.Abstractions/v0.2.0~v0.5.0(I2 契约收口 + 联动 bump)+ Federation.WeChat/v0.6.0~v0.16.1(明文模式 + 图文模板解析链 4 级 + 免登链接基址 + {text} 占位符动态化)+ WeChatOperations/v0.5.0~v0.6.1(I2-10 订阅统计派生改造 + 事件回复排他单模型)+ Federation.WeChat.MessageGateway/v0.1.1;当前 55 包最新发布版本见 docs/versions.json(build/gen-versions.ps1 生成)。

设计思路与 ABP 兼容策略(最优设计为默认、兼容 ABP 为特殊需求、碰巧兼容只记录)+ 各扩展设计分类见 docs/扩展模块设计思路与ABP兼容策略.md;状态跟踪见主框架私有 _TKWF/docs/03_扩展模块/总览和跟踪.md。


许可证

Copyright © 2026 LoongBa · Apache-2.0

开源、允许商用与闭源衍生,但必须保留版权与归属声明(Attribution)。

相关仓库

  • TKW.Framework(主框架) — 领域框架 + 扩展机制(TKWFExtensionAttribute + ExtensionInitializer 三钩子 + SG1 发现 + [TKWFEnabledExtension] 白名单启用 + 三层门控 ADR50)
  • LoongBa-Scaffold — 文档体系脚手架来源
Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.1.2-preview.0.46 0 10/30/2026
0.1.2-preview.0.43 24 10/30/2026
0.1.2-preview.0.42 32 10/30/2026
0.1.1 64 10/27/2026
0.1.1-preview.0.298 37 10/27/2026
0.1.1-preview.0.295 57 10/26/2026
0.1.1-preview.0.287 49 10/26/2026
0.1.1-preview.0.286 43 10/25/2026
0.1.1-preview.0.285 48 10/25/2026
0.1.1-preview.0.280 50 10/24/2026
0.1.1-preview.0.278 54 10/24/2026
0.1.1-preview.0.248 50 10/21/2026
0.1.1-preview.0.245 49 10/21/2026
0.1.1-preview.0.239 54 10/20/2026
0.1.1-preview.0.228 50 10/20/2026
0.1.1-preview.0.227 46 10/20/2026
0.1.1-preview.0.220 50 10/18/2026
0.1.1-preview.0.218 47 10/17/2026
0.1.1-preview.0.209 50 10/17/2026
0.1.1-preview.0.208 48 10/17/2026
Loading failed