更新日志 · XiHan.Framework
本文件记录 XiHan.Framework 各版本的变更。每条标注 新增 / 修复 / 优化 / 调整 / 升级 / 移除 类别。只收录使用者可感知的变更,仓库自身的配置、CI、测试工程与构建脚本不列入。框架以 NuGet 包形式发布,升级前请留意「调整」类中的破坏性变更。
v4.4.0 (2026-09-22)
- 修复
TenantWriteGuard.Suppress()作用域内,Update / Delete / 软删除 / 恢复操作的预读仍受全局租户过滤,跨租户成员(归属租户 A、当前活动在租户 B)的自有行被判定为不存在,豁免实际只对TenantId=0的行生效。对象式写入的预读改为经GetForWriteAsync/CreateWritePreReadQueryable执行,作用域内清除IMultiTenantEntity过滤,含软删除的预读同理 - 修复 内存诊断读数在 regions GC 下可能为负值:
GC.GetTotalMemory(false)在 gen0 因固定对象保留额外 region 时发生无符号下溢(dotnet/runtime#130888)。DiagnosticsService.GetMemoryInfo与MemoryHealthCheck改取GC.GetGCMemoryInfo()的HeapSizeBytes - FragmentedBytes,即最近一次 GC 结束时托管堆的实际占用。AllocatedBytes的名称与类型不变,首次 GC 前为 0 - 升级 升级依赖,发布 v4.4.0
v4.3.0 (2026-09-12)
升级须知
所有公开的 InMemoryXxx 默认实现统一更名为 DefaultXxx,不保留旧类型别名:DefaultRefreshTokenStore、DefaultConversationStateStore / DefaultTelegramUpdateDeduplicator、DefaultDelayQueue / DefaultDistributedLock、DefaultEventInbox / DefaultEventOutbox、DefaultSearchEngine(命名空间迁至 XiHan.Framework.SearchEngines.Default)、DefaultBackgroundJobStore / DefaultJobStore、DefaultGrayRuleRepository、DefaultUpgradeLockProvider / DefaultUpgradeVersionStore、DefaultWorkflowBookmarkStore / DefaultWorkflowDefinitionStore / DefaultWorkflowInstanceStore;XiHanJobBuilder.UseInMemoryStore / UseInMemoryLock 同步更名为 UseDefaultStore / UseDefaultLock。直接引用旧具体类型的应用需同步改名;仅依赖接口与模块默认注册的应用不受影响。
上述默认实现同时增加了容量或 TTL 边界,满载后的行为随之改变:缓存型数据先清理过期项;锁满载时返回获取失败;队列与事实数据存储满载时抛出 InvalidOperationException 拒绝新增,并提示替换为应用级持久化实现。这些实现仅适用于开发与单实例场景,多实例部署应改用 Redis 或数据库实现。
- 调整 认证、Telegram、缓存锁 / 延迟队列、EventBox、Workflow、Tasks、Upgrade、Traffic、Search 的 16 组进程内默认实现统一采用
DefaultXxx命名 - 修复 上述默认存储全部增加容量或 TTL 边界,进程长期运行时不再无界占用内存
- 新增 刷新令牌默认实现保持零外部依赖;多实例或持久化场景由应用层实现
IRefreshTokenStore并覆盖默认注册 - 优化
PerformanceMonitor由无界记录集合改为只保留最近 10000 条;Local / OSS / COS 分片上传自动回收 24 小时无活动的进程内会话 - 升级 升级依赖,发布 v4.3.0
v4.2.0 (2026-09-04)
升级须知
XiHan.Framework.Serialization 不再引用 Newtonsoft.Json,只使用 System.Text.Json。此前通过该包传递引用 Newtonsoft.Json 的项目需自行添加依赖。使用 XiHan.Framework.Data 的应用不受影响,Newtonsoft.Json 仍由 SqlSugarCore 传递引入。
两处输出不再依赖运行平台,结果可能与上一版不同:NormalizeLineEndings 固定输出 \n(此前在 Windows 上输出 \r\n);SanitizeFileName / IsValidFileName 改按各平台限制的并集处理(此前在 Linux 上只过滤 \0 与 /)。
- 新增
PathHelper.PathComparison/PathComparer:本机文件系统路径的大小写比较口径由运行平台决定,PathEquals/IsSubPath/GetCommonPath、虚拟文件系统的物理路径去重键与变更追踪缓存统一使用该口径。此前固定为OrdinalIgnoreCase,在 Linux 上会将/app/Data与/app/data判定为同一目录。虚拟路径与嵌入资源名属于逻辑标识,统一使用Ordinal - 新增 建表扫描不再要求实体继承
IEntityBase,标注[SugarTable]的类型即纳入建表 - 修复
IsPathSafe与IsSubPath以字符串前缀判定目录穿越,basePath为/app/data时/app/database/secret会被判定为安全路径。改为按路径分隔符边界判定 - 修复 跨平台流转的数据不再依赖运行平台:净化后的文件名按各平台限制的并集处理,保留名与末尾的点、空格一律判定为非法;对象存储的键只识别
/为分隔符(\在 S3 / OSS / COS 的键中为合法字符);SplitToLines识别三种行尾,NormalizeLineEndings固定输出\n - 调整
XiHan.Framework.Serialization移除Newtonsoft.Json引用 - 升级 升级依赖,发布 v4.2.0
v4.1.0 (2026-08-31)
升级须知
本次含多处破坏性变更:
- 默认节点命名统一为
Default:EventBus 的 RabbitMQExchangeName=Default、QueueName/ClientProvidedName=Default.EventBus,KafkaTopicName/GroupId=Default.EventBus,RedisStreamKey=Default:EventBus:Stream、ConsumerGroup=Default.EventBus;Tasks 的 Redis 作业存储KeyPrefix=Default:BackgroundJobs;Caching / Authentication / Workflow 内部 Redis 键前缀由xihan:改为default:;AI 知识库默认集合名改为default_knowledge。升级后旧队列中未消费的消息、旧键上的锁与待处理作业不会自动迁移,需沿用旧名的部署请在appsettings中显式配置;知识库集合更名后需重建或重新摄取 - 模块分库配置由顶层
ConnectionConfigs条目改为父连接下的ModuleDataSourceConfigs,条目只写模块名与连接串,其余字段继承父连接,ConfigId由框架派生为{父连接}_{模块名}(原Erp变为Default_Erp);实体特性[DataSource]更名为[ModuleDataSource] - 库隔离租户的模块表存储位置由共享模块库(
Default_{模块名})改为该租户专属的模块库(库名{租户库名}_{模块名})。升级后这些库为新建空库,共享模块库中属于这些租户的存量数据需自行迁移;不迁移的部署可将XiHan:Data:SqlSugarCore:EnableTenantModuleDatabaseConvention置为false保持原行为 - 三个数据访问接口新增成员,自定义实现需补齐:
ISqlSugarClientResolver.GetCurrentLayoutConfigIds()、ISqlSugarTenantConnectionResolver.GetModuleDataSourceNames()、IDbInitializer.InitializeCurrentLayoutAsync() EnableAutoCheckOnStartup开启时现在会实际执行迁移。此前UpdateScripts下的脚本从未被执行,升级到本版后将在启动时按序全部执行,升级前请备份数据库
- 新增 实体按模块数据源分库路由:实体标注
[ModuleDataSource("Erp")]后固定写入该模块库,租户上下文保持不变;模块维度与租户维度正交,目标连接由模块名与当前租户共同决定,模块名不再占用顶层ConfigId命名空间。仓储DbClient与CreateQueryable<T>改为按实体解析,声明的模块库无对应连接时抛出异常;建表初始化同步收窄,声明了模块库的实体只在该库建表;DataSeederBase新增DbClientFor<T>() - 新增 库隔离租户按约定自动获得整套模块库:租户连接描述符未声明模块库时,按默认布局逐条派生,库名由租户主库名推导;显式声明优先于约定;无法识别库名字段(如 Oracle)时抛出异常,不回落到共享模块库;开关
EnableTenantModuleDatabaseConvention默认开启 - 新增 SignalR 会话闸门
SessionStateHubFilter:连接建立与方法调用经与 HTTP 侧相同的ISessionStateGate校验,已登出、被强制下线或已过期的会话不再接收实时推送;会话抽象由Web.Api/Session下沉至Web.Core/Session,HTTP 中间件与选项仍在Web.Api - 新增
GetClaimsIgnoringLifetime:跳过有效期校验,签名与发行者 / 受众仍照常校验。刷新令牌流程只在令牌过期后触发,此前挂在原解析路径上的会话有效性与模仿态判定因此从未生效 - 新增 模仿态原语:
ICurrentUser/ClaimsPrincipal的IsImpersonating()与XiHanClaimsIdentityExtensions.BuildImpersonatorClaims(...),无需手动拼接声明字符串 - 修复 启动自检只创建版本记录、不执行迁移:
IUpgradeEngine.ExecuteAsync没有调用方,UpdateScripts下的脚本从未执行,sys_version.db_version始终为0.0.0,为既有实体新增字段后部署会出现 42703 且无任何报错。改为自检后同步执行迁移,失败时抛出异常中断启动;未注册引擎时跳过 - 修复 建库建表遍历遗漏模块库:
DbInitializer的遍历名单只含顶层ConfigId,派生的模块库不会建库建表且无任何报错,改为经ISqlSugarClientResolver.GetAllConfigIds()遍历;库隔离租户开通时只初始化主库,新增IDbInitializer.InitializeCurrentLayoutAsync()按当前布局同时初始化主库与模块库 - 修复 模块指定独立物理库但未声明从库时,错误继承父连接的从库,读操作会落到其他库;改为仅在模块与父连接共用物理库时继承
- 修复 模仿者用户标识以
Guid.TryParse解析,而用户主键类型为long,解析结果始终为null,模仿态判定失效且无任何报错;改为按long解析 - 修复 模块库派生的 SQLite 库文件名依赖运行平台:连接串按
Path.*的平台语义解析,Linux 下反斜杠不视为分隔符,C:\data\qqq.db被整体当作文件名派生为C:\data\qqq_Erp.db,Path.Combine还会将分隔符替换为当前平台风格。改为按字符切分,同时识别两种分隔符,目录段原样保留 - 升级 发布 v4.1.0
v4.0.1 (2026-08-28)
- 调整 模块加载树不再写入应用日志管道,仅保留启动期控制台输出
- 升级 升级依赖,发布 v4.0.1
v4.0.0 (2026-08-28)
升级须知
本次为主版本升级,含多处破坏性变更:
XiHan.Framework.SearchEngines.Abstractions包内类型的命名空间补上Abstractions段,与程序集名一致(如XiHan.Framework.SearchEngines.ISearchEngine→XiHan.Framework.SearchEngines.Abstractions.ISearchEngine)YamlHelper由XiHan.Framework.Utils.Text.Yaml移到XiHan.Framework.Utils.Serialization.Yaml,与同组 Yaml 类型归并;未提供过渡类型转发,按旧命名空间using的代码需同步调整- Base36 / Base58 / Base62 / Base95 与自定义进制的
Encode改为大端读入,多字节编码结果与此前不同,已落库的旧编码需按旧规则重算(单字节编码不受影响) Stack扩展Clone/Where/Select的返回栈顺序由「与源栈相反」改为「与源栈一致」;属性差异比较由「恒返回空列表」变为返回真实差异- 分布式与混合缓存的
KeyPrefix由死配置变为真正生效。未配置该项的部署产出的键与此前逐字节一致;已配过该项的部署键名会多出前缀,旧键读不回来、等其自然过期
- 修复 Castle 拦截器上真异步
Task<T>方法被拦截即死锁:包装任务写回 Castle 返回值槽位后又从同一槽位读回 await,等的是它自己 - 修复 本地对象存储的分片上传每次都失败:独占写入流未释放即对同一路径读回算哈希,异常被兜底 catch 吞成
Success=false - 修复 Scriban 模板上下文桥接从未生效:类型别名遮蔽导致交给 Scriban 的是框架自己的上下文对象,模板里取不到任何变量、渲染结果全空
- 修复 脚本执行的
TimeoutMs形同虚设,改为竞速等待并抛ScriptTimeoutException - 修复 Sqids 默认配置下编码不可逆(补位处
char + char走整数加法,拼进去的是码点之和的十进制文本),SnowflakeIdOptions.Clone直接返回自身的假克隆会让两个生成器共用 WorkerId - 修复 缓存 5 处缺陷:
GetMany/GetOrAddMany在工作单元部分命中时结果与入参键错位、KeyPrefix全 src 无读取点、Redis 启用后容器里存在两条IDistributedCache注册、CacheAspect不识别ValueTask、XiHanHybridCache构造函数的无用形参 - 修复 集合扩展的谓词重载解析回自身导致无限递归(调用即
StackOverflowException),进制编解码字节序不一致,CustomRadix缓冲区容量公式的底数与真数写反,属性差异比较因重载绑错恒返回空列表 - 修复
IsNullOrEmpty泛型重载把非 null 的空集合判成「非空」,调用方的空集合短路全部失效 - 修复 工具库一批公共 API 实际不可用:
FormatXml/CompressXml恒返回空串、二进制文本编解码不可逆致水印往返拿回乱码、CompareJson对标量比原文、MaskEmail正则无捕获组把邮箱脱敏成@.、确定性 GUID 版本位写错字节、ECIES 解密按错误曲线推算临时公钥长度、JSON 选项IgnoreNullValues从未被读取与MergeJson的类型降级 - 修复 六个机器人子包(DingTalk / Email / Lark / Sms / Telegram / WeCom)的注册扩展不传
configure时选项服务无人登记,容器构建期即失败;飞书TagButton.Type默认值拼写为defult - 修复 事件总线自定义处理器工厂解析失败不再让整条触发链连坐,本地事件总线的处理器生命周期缺陷
- 修复 Serilog 异步管道的
EnableAsyncLogging/AsyncBufferSize/BlockWhenFull三个选项接入实现,此前全仓零读取点、配了等于没配 - 修复 文件日志编码与日志配置构建器缺陷、后台服务统计与优雅停止缺陷、配置扩展与异常扩展及日志扩展缺陷
- 修复 运行时长改用单调时钟,NTP 校时回拨后不再算出负的运行时长
- 修复 分页异步入口的取消令牌不再被忽略(
PageQueryExecutor.ExecuteAsync、PageExtensions.ToPageResultAsync、PageConverter.ConvertItemsAsync) - 修复 Web.Docs 生成的 XML 文档 ID 缺方法泛型参数个数标记,泛型方法的注释在 Swagger 上永远查不到
- 修复 Web.Core 的声明转换改为幂等,
IClaimsTransformation被多次调用不再累积重复声明 - 修复 审计日志队列容量补下界校验,
capacity=0不再造出「永远是满的」队列(日志静默丢弃、反压卡死请求线程) - 修复
Workflow.Abstractions的ConvertTo<T>传入空值不再对值类型抛空引用 - 调整
SearchEngines.Abstractions与YamlHelper的命名空间归位 - 升级 升级依赖,发布 v4.0.0
v3.14.0 (2026-08-26)
升级须知
八家 OAuth 提供商改为框架自研实现,认证包不再引用 AspNet.Security.OAuth.GitHub / .Gitee / .QQ 与 Microsoft.AspNetCore.Authentication.Google,NuGet 依赖只剩 JwtBearer 与 ASP.NET Core 共享框架。配置节的既有键名保持不变,直接引用过这些第三方包类型的代码需改到框架的 XiHanOAuthHandler 一侧。
- 新增 八家 OAuth 提供商全部自研,新增微信、企业微信、飞书、钉钉登录;每家支持账号授权与扫码两种登录方式,同一家可用不同
Name、相同Provider注册成两个方案 - 新增
OAuthProviderConfig增加Provider、Mode、AgentId、CorpId、LoadMemberProfile、AuthorizationEndpoint与AuthorizationParameters;端点与声明类型集中登记为OAuthProviderEndpoints与OAuthClaimTypes - 调整 移除四个第三方 OAuth 提供商包,企业微信扫码改用新版端点,资料改走
auth/getuserdetail,不再强依赖通讯录权限 - 修复 OAuth 令牌响应体不再原文进日志,按字段名抹掉取值并截断至 512 字
- 修复 状态串还原改为与搬运同样门控,扫码回调上多传一个
_oauthstate不再顶掉真实 state 让登录失败 - 修复 微信不再按远端回显的权限范围决定是否拉取资料,不再静默产生资料全空的账号
- 修复 飞书重写的令牌请求补回
code_verifier,启用 PKCE 时不再被直接拒绝,校验串也不再随票据进登录 Cookie - 修复
Scopes回到追加语义(微信与企业微信的两种登录方式权限范围互斥,仍整体替换),显式配置不再挤掉提供商默认值导致邮箱补取被静默关闭 - 修复 钉钉令牌响应改为在原字段上补标准字段名并写出 corpId 声明;企业微信通讯录占位值不再覆盖真实资料;GitHub 与 Gitee 的邮箱补取失败不再中断登录
- 修复 日志滚动选名改按已分配字节数,磁盘大小不足以判断
- 修复
IXiHanMethodInvocation.ReturnValue改回可空,修正错误的不可空标注 - 升级 升级依赖,发布 v3.14.0
v3.13.1 (2026-08-17)
- 修复 分页执行器未应用 Skip/Take,分页接口返回整表匹配记录而非当前页(Domain.Shared)
- 修复 分页克隆丢失关键字匹配模式且浅拷贝共享实例、超页时当前页计数为负、关键字字段先去重后 trim、验证器死分支等五处(Domain.Shared)
- 修复
Sm2Helper静态构造崩溃与签名 / 验签把 DER 当密钥误用,SM2 签名验签全链路重写(Security,此前公开 API 完全不可用) - 修复 命令行解析器停止标记后参数丢失前缀、未知选项被静默接受、大小写配置不生效、Command 恒为空(DevTools)
- 修复 TypeFinder 静默吞掉程序集扫描异常,改为留痕日志后跳过(Core)
- 修复 应用释放时模块关闭钩子兜底执行,非主机路径不再静默丢失(Core)
- 修复 钉住 SQLitePCLRaw 2.1.13,修复 SqlSugarCore 传递依赖高危漏洞 CVE-2025-6965
- 优化 NuGet 包接入 SourceLink,可直接调试进框架源码
- 升级 升级依赖,发布 v3.13.1
v3.13.0 (2026-08-16)
- 新增 动态连接注册器支持注销,外部数据源改口令或停用后无需重启
- 修复
[UnitOfWork]在 HTTP 入口生效,动作抛异常时事务回滚 - 修复
[Cacheable]与[CacheEvict]在 HTTP 入口生效 - 升级 升级依赖,发布 v3.13.0
v3.12.1 (2026-08-14)
- 新增 建表与种子支持按需选取,可按分组、目标库与连接配置范围细分
- 升级 升级依赖,发布 v3.12.1
v3.12.0 (2026-08-13)
- 修复 类级
[DynamicApi(Name)]生效为控制器名,插件与宿主的同简名服务可共存 - 修复 控制器名判重改为忽略大小写,与方法级路由判重一致
- 升级 升级依赖,发布 v3.12.0
v3.11.1 (2026-08-12)
- 修复 Redis 未启用时
IRedisDelayQueue<>不注册导致应用起不来,改为默认注册进程内实现
v3.11.0 (2026-08-11)
- 新增 新增严格隔离多租户实体标记
IStrictMultiTenantEntity,读写口径都按相等收紧 - 优化 383 处
<inheritdoc />替换为完整 XML 文档注释,IntelliSense 上不再是空白 - 升级 升级依赖,发布 v3.11.0
v3.10.1 (2026-08-06)
升级须知
本版把目录类配置的默认值统一改为帕斯卡命名:升级脚本目录 migrations → UpdateScripts,签名密钥 keys/ → Keys/,日志 logs/ → Logs/,本地存储 wwwroot/uploads → wwwroot/Uploads。只改默认值、不动读取逻辑,已在配置中显式写死路径的部署不受影响;依赖默认值且部署在区分大小写的文件系统上的,需要一并迁移这些目录。wwwroot 保持小写不变,它由 ASP.NET 固定解析。
- 调整 目录类配置默认值统一帕斯卡命名,升级脚本目录由
migrations改为UpdateScripts - 升级 升级依赖,发布 v3.10.1
v3.10.0 (2026-08-05)
破坏性变更
本版三处。动态 API 的路由段只认显式 [FromRoute],此前按参数名自动生成的 Id 路由段全部消失(GET /api/User/User/{id} 变为 GET /api/User/User?id=1),需保持原 URL 的请显式标注。IDistributedCache 移除两个 Lua 脚本成员,改用 ICacheSupportsLuaScript 的中立签名。工作单元回滚后再调 CompleteAsync 由静默返回改为抛出,自行实现 IUnitOfWork 的需补 IsRolledback 成员。
- 新增 新增
Web.Mcp包,MCP Server 接入下沉至框架,应用只需声明模块依赖 - 新增 新增 OpenID Connect 协议层,含签名密钥、id_token 签发与发现文档
- 新增 搜索引擎从空壳改为可用抽象,拆出契约包与进程内实现
- 新增 新增 Elasticsearch 搜索实现,同一套契约在两种实现上行为一致
- 新增 Redis 事件总线接管滞留消息并引入死信,消除待处理列表的永久孤儿
- 新增 动态 API 新增控制器名唯一性校验,装配错误在启动期暴露
- 调整 破坏性变更:路由段只由显式
[FromRoute]产生,参数名不再决定 URL - 调整 破坏性变更:缓存抽象移除 Lua 脚本成员并改用中立签名,不再出现 StackExchange.Redis 类型
- 调整 破坏性变更:工作单元回滚后再提交改为抛出,
IUnitOfWork新增IsRolledback - 修复 修复约定注册使 Scoped / Singleton 服务的拦截器全体静默失效
- 修复 回滚后的连接不再被复用,消除接口返回 200 但一行没写
- 修复 分布式事件改到事务提交成功之后才发布,消除幽灵事件
- 修复 修复收件箱幂等三处失效,重复消息不再被内联再处理一遍
- 修复 动态 API 装配失败改为 fail-fast,不再静默丢掉整个服务的端点
- 修复 动词前缀按词边界匹配,方法名不再被腰斩成错误路由
- 修复 修复日志缓存容量检查清空全表,
Flush改为真正等到落盘 - 修复 切换日志目录与清空日志时重置滚动状态,滚动按已分配字节判断
- 修复
ApiResponse.Code的数字转换器改标在属性上,code 恒为数字 - 移除 移除
Observability的数据库与 Redis 健康检查,两者从不实际探测 - 升级 升级依赖,发布 v3.10.0
v3.9.0 (2026-07-30)
- 新增 知识向量集合的维度与集合名可配置,不再锁定 1536 维嵌入模型
- 新增 向量库不可达翻译为 503 并纳入健康检查,覆盖检索与摄取全部 I/O 点
- 新增 嵌入调用失败翻译为可操作消息,带上提供方与模型名
- 修复
requiresNew工作单元改用独立物理连接与事务,修复内层提交静默失效 - 升级 升级依赖,发布 v3.9.0
v3.8.0 (2026-07-23)
- 新增 新增动态连接注册器,支持运行期登记外部数据库连接并按
ConfigId解析 - 调整 数据库元数据读取显式指定连接时改为直连连接作用域,不再登记进当前工作单元
- 修复 动态连接注册器改注入单例
SqlSugarScope,修复启动期依赖注入生命周期校验崩溃 - 升级 升级依赖,发布 v3.8.0
v3.7.0 (2026-07-18)
- 新增 新增工作流引擎,含契约包
Workflow.Abstractions与实现包Workflow - 新增 新增会话状态闸门中间件,会话失效返回 401、锁定返回 423,在全部已认证端点生效
- 新增 数据层接线行版本乐观锁,修复并发丢失更新与软删行被并发复活
- 新增 软删仓储新增含软删写路径与物理清除通路,恢复操作可用化、批量操作幂等化
- 新增 开放接口日志记录完整请求与响应内容,并补记凭证归属用户与 API 名称
- 调整 会话「锁屏」正名为「锁定」,并透传锁定原因
- 调整 解耦 ADO 命令超时与慢 SQL 日志阈值
- 修复 修复工作单元事务与
SqlSugarScope异步上下文脱钩导致的静默丢写 - 修复 写路径租户边界,禁止租户态改写平台全局行与异租户行,并防护插入劫持
- 修复 从库全灭时回退主库,消除全零权重导致的读路径崩溃
- 修复 重建额外全局过滤器机制
GlobalFilters,修复原实现一经使用即抛异常 - 修复 差异日志按主键对齐逐行落库,修复批量写审计只记录首行
- 修复 修复按审计查询的仅软删选项恒返回空集
- 修复 仓储写操作移除显式查询过滤器,修复与差异日志叠加的参数同名冲突
- 修复 令牌会话过期时间优化
- 升级 升级依赖,发布 v3.7.0
v3.6.0 (2026-07-15)
破坏性变更
本版移除 QueryBehavior、PageRequestDtoBase.Behavior 与 WithoutPaging(),不分页查询请改走仓储既有的 List 方法(GetAllAsync / GetListAsync)。设置加密需配置 XiHanAesOptions.Key,未配置将抛出异常。
- 新增 缓存
CacheEvict真正执行失效,授权评估RequiredClaims,新增设置定义管理器ISettingDefinitionManager - 新增 流量灰度新增 IP 匹配器
IpAddressGrayMatcher,支持精确 IP 与 CIDR - 新增 安全新增国密 SM4 对称加密
Sm4Helper - 新增 分析器新增
XHFA001规则,禁止直接 newHttpClient - 新增 开发工具
DevTools升为一等模块,命令行接入依赖注入 - 调整 破坏性变更:移除
QueryBehavior、PageRequestDtoBase.Behavior与WithoutPaging(),不分页查询改走仓储 List 方法 - 调整 破坏性变更:设置加密改走
XiHanAesOptions.Key,移除硬编码占位密钥,未配置密钥即抛异常 - 调整 元数据字段改为 const / readonly,
TargetFramework由程序集特性派生 - 修复 分布式 ID 生成器改为从配置构建,修复多节点重复 ID
- 修复 审计日志字段级脱敏与请求头脱敏
- 修复 差异日志软删除 / 恢复被误记为更新,超长快照产出非法 JSON
- 修复 Blowfish 改用随机 IV,修复相同明文产出相同密文及解密未按实际长度截断
- 修复 审计日志在
DropOnFull开启时重复入队 - 移除 移除
EntityChangeInterceptor,差异日志统一为单一通道 - 升级 升级依赖,发布 v3.6.0
v3.5.0 (2026-07-10)
- 新增 链路追踪与可观测性对齐 OpenTelemetry 与 W3C 标准
- 新增
Observability接入 OTel SDK,支持 OTLP 与 Console 导出,新增配置节XiHan:Observability - 新增 SqlSugar DB span,每条 SQL 产出挂在请求 span 下的子 span
- 新增
EventBus消费端 Consumer span、Redis 缓存操作 span,异常记录到当前 span - 新增 Serilog 日志携带
TraceId与SpanId,可与链路关联查询 - 调整
TraceId与EventBusCorrelationId收敛为同一 W3CTraceId - 调整 网关
TraceId对齐 W3C 标准 - 调整 Metrics 改用
System.Diagnostics.Metrics.Meter,支持 OTLP 与 Prometheus 导出 - 优化 控制台与文件日志模板将链路 ID 移至日志级别之后
- 升级 升级依赖,发布 v3.5.0
v3.4.0 (2026-07-08)
- 新增 新增 Gitee 第三方 OAuth 登录 Provider
- 修复 多租户基类补齐
IMultiTenantEntity,修复租户行过滤全程失效 - 升级 升级依赖,发布 v3.4.0
v3.3.0 (2026-07-08)
- 新增 分布式事件总线新增 RabbitMQ / Kafka / Redis 三种 Broker Provider
- 新增 新增后台作业管理器
IBackgroundJobManager,支持一次性即发即忘作业 - 新增 后台作业新增 Redis 持久化存储
- 调整 审计日志通用件下沉至新包
XiHan.Framework.Auditing - 调整 密码哈希器与选项收归
Security包并由其自注册 - 修复
CurrentPrincipalAccessor匿名请求兜底,修复匿名访问空引用 - 升级 升级依赖,发布 v3.3.0
v3.2.0 (2026-07-06)
- 新增 新增 AI 抽象包
XiHan.Framework.AI.Abstractions,支持 OpenAI 兼容 Provider 解析与会话门面 - 新增 AI Provider 解析支持 Invalidate 配置热切换
- 新增 新增 RAG 检索增强底座,含嵌入 Provider 与向量抽象
- 新增 新增 Agent 门面与 MCP 工具投影,技能注册表自动收纳
- 新增 AI 新增护栏中间件、遥测与缓存管道开关、提示词库默认源
- 新增 SqlSugar 主从读写分离配置完整暴露,新增连接配置构建前钩子与追加式 AOP
- 新增 从库支持健康探针,租户连接支持从库
- 调整 移除 MySQL 存量表 utf8mb4 兜底转换
- 修复 从库读权重
HitRate绑定失效导致从库不分担读 - 修复 MySQL 初始化强制 utf8mb4,修复 emoji 写入报错
- 升级 升级依赖,发布 v3.2.0
v3.1.0 (2026-07-03)
- 新增 新增
Bot.Sms短信子包 - 新增 Telegram 支持多机器人平台,含 Webhook 中间件与内置 /start /help /myid 命令
- 新增 新增入站限流与三态熔断,默认关闭
- 新增 支持运行时按租户注册 SqlSugar 连接
- 调整 Bot 库拆分为 Email / Sms / Telegram / DingTalk / Lark / WeCom 六个 Provider 子包,配置 store 化
- 调整 返回码语义化并对齐 HTTP 标准,新增 10000+ 业务码区段
- 调整
IBotClient发送方法返回BotDispatchResult,支持显式通道与取消令牌 - 修复
BotResult工厂自递归导致的堆栈溢出 - 修复 Bot 投递结果被门面丢弃,Email 取消被吞成发送失败
- 修复
IsPasswordReusedAsync改为加盐哈希比对,修复历史密码永不命中 - 升级 升级依赖,发布 v3.1.0
v3.0.1 (2026-06-27)
- 新增 新增国际化机制,含请求文化中间件、异常可本地化与响应本地化兜底
- 新增 支持时区切换
- 新增 排序字段由 C# 属性名解析并映射为物理列名,标准化表名与列名
- 调整 撤销分页方法统一走 POST 的约定,改由各方法显式标注
HttpPost - 修复 JSON 本地化资源无 backing 程序集时崩溃
- 修复
ApplyFilter健壮值强转,修复 In 类型不匹配与可空字段处理
v3.0.0 (2026-06-20)
- 新增 新增分布式锁、队列与延迟队列
- 新增 新增一次性验证码服务
IOneTimeCodeService - 新增 实时通信新增后台任务进度事件常量
TaskProgress - 新增 本地存储 Provider 支持预签名 URL
- 优化 日志体系规范化,支持敏感脱敏、查询不落操作日志与软删恢复识别
- 优化
RandomCoder全面加密安全化,异常统一化输出 - 修复
DateTimeOffset按 ISO 8601 带时区偏移序列化,返回码按数值序列化 - 修复 本地存储静态文件注册在鉴权前导致上传目录 401
- 修复 动态 API 特性布尔默认值覆盖全局配置
- 修复 Cron 时区统一、六段秒位、调度死亡显性化与一次性触发语义
- 移除 移除消息后台发送,改由业务层接管
v2.5.0 (2026-05-30)
- 新增 新增混合授权与 ABAC 策略,落地权限体系与登录日志
- 新增 新增分析器包
XiHan.Framework.Analyzers - 新增 新增请求链路追踪 ID 与
ApiLog写入管道 - 新增 新增密码策略服务、消息发件箱与实体变更拦截器
- 新增 枚举元数据增强,支持动态 JSON 加载与变更重载
- 调整 架构重构,内核分层与启动层初始化
- 调整 仓储参数注入移入
DataExecutingAOP - 优化 收紧 OpenApi 算法基线并强化防重放
- 优化
AuditLog更名为DiffLog,减少歧义 - 修复
EventBus后台服务停止异常 - 修复 动态 API 取消令牌绑定与命名空间路由、去重、绑定一致性问题
- 移除 移除分表仓储与基类索引
v2.4.0 (2026-04-08)
- 新增 新增第三方登录支持
- 新增 新增 Castle 动态代理集成库与缓存 AOP 拦截
- 新增 新增动态 API 权限保护
- 新增 数据库初始化下沉到框架
- 调整 各模块内联注册提取为
AddXiHanXxx扩展方法,可脱离模块系统直接注入 - 调整 Contracts 接口去除实体泛型参数,消除应用层 HTTP 形状泄漏
- 修复 long 序列化为字符串,避免 JavaScript 精度溢出
- 修复 HTTP 请求 string 类型重复序列化
v2.3.3 (2026-03-14)
- 新增 实现机器人功能,支持邮件、钉钉、飞书、企业微信与 Telegram
- 新增 实现消息模块功能,重写 AI 功能
- 新增 新增异步日志管道,中间件与过滤器改为可插拔管道
- 新增 新增统一请求上下文
RequestContext - 新增 新增 OpenAPI 签名加密与分布式安全升级引擎
- 新增 新增动态 API 分组、标签能力与数据库元数据能力
- 调整 接口返回默认改为 camelCase,统一返回结果封装
- 调整 强化工作单元失败回滚语义
- 修复 仓储条件更新与删除的租户过滤缺口
- 修复 CRUD 服务基类的 DTO 到实体映射覆盖失效
v2.2.0 (2026-02-17)
- 新增 新增租户数据隔离、租户解析透传与多租户实体基类
- 新增 新增通用响应封装与错误消息混淆
- 调整 租户 ID 由 GUID 统一改为 long
- 优化 优化分页查询与自动分页仓储,可指定分页方法
- 优化 优化 OpenAPI 文档与标签功能
- 优化 优化 SqlSugar ID 生成与分布式 ID 配置注入
- 修复 分页不生效,单审计实体无法使用仓储
- 修复 HTTP 库 Fluent API 设置不生效,动态 API 参数误加入路径
v2.0.0 (2026-01-26)
- 新增 新增数据库初始化与种子数据初始化服务
- 新增 实现认证授权体系,含鉴权、授权默认实现与密码配置项
- 新增 文件系统支持云存储(本地 / 阿里云 OSS / 腾讯云 COS / MinIO)及图片、视频处理
- 新增 分布式 ID 提供默认注入
- 调整 部分包抽离为抽象层
- 优化 重构仓储结构与参数类型,优化聚合根与数据访问基类
- 修复 动态 API 多版本丢失、版本号不正确与服务未暴露
- 升级 全框架升级至 .NET 10,同步升级所有依赖
v1.4.6 (2026-01-26)
- 修复 HTTP 库 Fluent API 设置不生效
v1.4.5 (2025-11-12)
- 调整 仓储实现分页,统一审计字段,重构 CRUD 服务与表达式扩展
- 优化 Base 编码转换器性能优化,内存分配减少约 70-80%
- 优化 优化分布式 ID 生成库与命名空间
- 修复 ID 工厂泛型类型与 HTTP 请求序列化问题
- 修复 VS2026 将
Reverse扩展误映射为Span.Reverse - 移除 移除默认 ID 注入与 snk 签名
- 升级 升级依赖,发布 v1.4.5
v1.4.3 (2025-10-27)
- 新增 新增动态 WebApi 功能
- 新增 补充更多基础类型转换能力
- 调整 分页重构,统一仓储方法名
- 修复 字符串强转可空数值类型时转换报错
- 升级 升级依赖,发布 v1.4.3
v1.4.2 (2025-10-23)
- 新增 HTTP 包实现代理功能
- 优化 优化扩展方法,避免二义性污染
- 升级 升级依赖,发布 v1.4.2
v1.4.1 (2025-10-19)
- 新增 完善租户接口,优化租户解析与租户设置
- 修复 修复依赖注入的默认实现
- 升级 发布 v1.4.1
v1.4.0 (2025-10-19)
- 新增 新增高性能线程安全内存缓存,支持惰性清理、事件通知与多种过期淘汰策略
- 新增 新增设置中心默认实现,完善本地事件总线
- 新增 新增顺序 GUID 生成器与锁扩展方法
- 优化 优化日志清理逻辑
- 升级 日志组件升级为
Task+Channel异步架构,新增可插拔格式化器与背压策略 - 升级 升级依赖,发布 v1.4.0
v1.3.6 (2025-10-17)
- 调整 调整开发工具与命名空间组织
- 修复 修复命令赋值错误
- 升级 升级第三方依赖
v1.3.5 (2025-10-16)
- 修复 修复 HTTP 模块扩展相关问题
- 修复 修复主键构造函数缺陷
v1.3.2 (2025-10-10)
- 新增 新增计划任务功能,完善调度能力
- 调整 重写任务调度,去除第三方库依赖改为自研
- 调整 调整命名空间
- 优化 优化并扩充仓储功能与实体建模
- 升级 升级第三方依赖
v1.3.1 (2025-09-24)
- 新增 引入默认模板引擎
- 优化 优化 HTTP 请求包
v1.3.0 (2025-09-20)
- 新增 新增领域模块
XiHan.Framework.Domain,完善实体与 ID 建模 - 新增 新增后台服务基类与配套示例
- 新增 新增命令行工具集,含进度条、加载指示器、彩色输出与交互式菜单
- 新增 新增表格打印,支持自适应列宽与多种边框样式
- 新增 新增 gRPC 库
XiHan.Framework.Web.Grpc - 调整 计划任务相关项目重命名,包名统一,
Data模块结构优化 - 优化 重写文件日志,大幅提升写入性能
- 升级 多轮升级第三方依赖
v1.2.1 (2025-09-08)
- 优化 精简与优化模块依赖引用
- 修复 修复包命名错误
v1.1.0 (2025-09-07)
- 新增 新增
Security、Script、DevTools等模块 - 新增 重写序列化器,新增 JSON 转换器、序列化 Try 方法与动态 JSON
- 调整 大规模包重构整合,
AspNetCore.Mvc并入Web.Api、Serilog 并入Logging、SqlSugarCore并入Data、SignalR 并入Web.RealTime - 调整 合并 Swagger 与 Scalar 为
Web.Docs,对象映射与后台任务相关包合并 - 优化 扩充表达式功能,优化重试、系统信息获取与对象映射
- 移除 移除
BlobStoring、DataFiltering、AspNetCore.Refit等模块 - 升级 升级依赖,发布 v1.1.0
v0.11.7 (2025-08-02)
- 新增 新增渐变控制台打印与项目信息展示
- 新增 扩充动态 JSON 与数字扩展方法
- 新增 集合新增随机取项能力
- 调整
AspNetCore.Serilog更名为XiHan.Framework.Logging,重构元数据包 - 优化 优化日志模块、应用启动流程与默认序列化选项
- 移除 移除
Serializable标记,统一使用System.Text.Json - 升级 升级依赖,发布 v0.11.7
v0.11.3 (2025-07-03)
- 优化 Windows 硬件信息采集由 wmic 替换为 PowerShell
- 移除 移除运行时已自带的重复功能
- 升级 升级依赖,发布 v0.11.3
v0.11.2 (2025-06-29)
- 修复 修复 JSON 字符串格式化问题
- 移除 移除 EFCore 库,ORM 统一使用
SqlSugarCore - 升级 升级依赖,发布 v0.11.2
v0.11.1 (2025-06-25)
- 新增 定义事件总线抽象接口,新增事件处理器工厂与事件追踪 ID 接口
- 新增 新增对象扩展包、类型辅助类与验证异常
- 调整 重构本地化包,
AssemblyHelper更名为ReflectionHelper - 优化 优化 HTTP 模块返回结果与序列化
- 优化 优化 RSA 加密默认参数、脱敏逻辑与
RandomCoder - 修复 动态 JSON 访问不存在属性时报错,改为返回
null - 升级 升级依赖,发布 v0.11.1
v0.9.4 (2025-06-05)
- 新增 扩充工具包,新增农历、异步屏障、数据预测与摩尔斯编码
- 新增 新增双向链表、堆栈、队列扩展方法与身份主体抽象基类
- 新增 新增 OpenAPI 支持
- 升级 升级第三方依赖
v0.9.3 (2025-06-03)
- 新增 新增事件总线,支持本地与分布式事件处理器
- 新增 新增
XiHan.Framework.Data包 - 调整 对象访问器由工具包迁移至核心包
- 优化 优化启动日志
- 修复 修复服务提供器为空与 AI 模块注入问题
v0.9.1 (2025-06-02)
- 新增 新增领域服务与仓储接口
- 新增 工作单元管理器支持子工作单元
v0.9.0 (2025-06-02)
- 新增 新增
XiHan.Framework.Script包,支持脚本安全执行与调试 - 调整 数据检测器
CheckHelper更名为Guard - 优化 优化 HTTP 包引用与整体包结构
v0.8.35 (2025-05-31)
- 新增 新增
DistributedIds、Validation、Authorization包,ID 算法补充 NanoId - 新增 扩充编码方案,新增 Base32 / Base36 / Base58 / Base62 / Base95 与自定义进制编码
- 调整
Data包更名为DataFiltering,ValidateCoder更名为RandomCoder - 修复 修复包引用错误
- 移除 移除 UUID 生成器
- 升级 升级依赖
v0.8.31 (2025-05-17)
- 修复 修复 AI 依赖升级后的接口兼容问题
- 移除 移除非常用功能
- 升级 升级
XiHan.Framework.AI依赖
v0.8.30 (2025-05-16)
- 新增 新增 Sqids 短 ID 编解码,支持代码动态加载
- 优化 优化 Python 解释器、日志输出与字符串方法
- 修复 修复 Sqids 算法缺陷
- 升级 升级第三方依赖
v0.8.28 (2025-05-06)
- 新增 新增数据库访问库与 SqlSugar 包
- 新增 新增雪花 ID、UUID 生成器与文本数字水印工具
- 新增 新增 MCP 包、SSE 通讯、模板引擎、SFTP / SSH 连接与 YAML 解释器
- 新增 新增简单的国际化处理器
- 优化 优化 RSA 加密与程序集依赖相关方法
- 升级 多轮升级第三方依赖
v0.8.20 (2025-04-02)
- 新增 新增
XiHan.Framework.Http.Client包 - 优化 优化工作单元处理逻辑
- 修复 判空统一改为
is null写法,规避运算符重载风险 - 升级 升级依赖
v0.8.18 (2025-03-19)
- 优化 细节优化
v0.8.17 (2025-03-18)
- 新增 新增本地化包
XiHan.Framework.Localization - 新增 新增混合缓存、深度合并配置与主题枚举
- 优化 优化设置与多租户模块引用
- 修复 修复模块间循环依赖
- 移除 移除多余包引用
- 升级 升级至 .NET 10 及相关依赖
v0.8.15 (2025-02-25)
- 新增 新增安全库与设置库
- 新增 新增 DDD 实体、聚合根与领域事件基础能力
- 新增 新增对象映射包,集成 Ollama 与 OpenAI 调用
- 新增 新增数据脱敏工具类,强化虚拟文件系统的文件监听
- 调整 重命名日志与实时通信等包
- 优化 优化 HTTP 请求处理、接口文档注入与虚拟文件系统包
- 移除 移除虚拟文件系统的文件缓存功能
v0.8.10 (2025-01-26)
- 调整 调整命名空间组织
- 优化 优化分页处理逻辑
- 升级 升级依赖
v0.8.9 (2025-01-21)
- 修复 补丁修复若干问题
- 升级 升级依赖并推进版本号
v0.8.7 (2025-01-05)
- 升级 升级第三方依赖
v0.8.5 (2024-12-16)
- 新增 新增工作单元、线程与多租户模块
- 新增 新增文本模板与虚拟文件系统模块
- 新增 新增 Redis 缓存包
- 新增 新增接口文档包
v0.8.4 (2024-12-10)
- 修复 修复 AspNetCore 包对象访问器注入问题
v0.8.3 (2024-12-10)
- 新增 新增 OTP 与 HMAC 生成能力
- 移除 移除
AspNetCore.MVC目录
v0.8.0 (2024-12-06)
- 新增 新增
AspNetCore.MVC库 - 新增 新增 XML 解析与表达式扩展方法
- 优化 优化树节点处理功能
v0.7.5 (2024-12-04)
- 新增 通用分页支持多条件筛选与多字段排序
- 新增 新增数据过滤与树形数据处理能力
- 新增 新增国密算法支持
- 新增 引入机器学习与人工智能相关依赖
- 升级 多目标支持 .NET 8.0 与 9.0
v0.7.0 (2024-11-13)
- 修复 修复时间转换为简易字符串时结果错误
- 升级 框架整体升级到 .NET 9
v0.5.9 (2024-10-28)
- 优化 细节优化
v0.5.8 (2024-10-28)
- 优化 优化模块化服务配置基类
v0.5.7 (2024-10-28)
- 优化 优化应用扩展实现
v0.5.6 (2024-10-28)
- 新增 新增核心包应用扩展
- 优化 核心包功能收尾完善
v0.5.5 (2024-10-27)
- 调整 更新工具包命名空间与项目引用关系
v0.5.4 (2024-10-27)
- 新增 新增核心包模块功能
- 移除 移除插件包
v0.5.3 (2024-10-26)
- 优化 细节优化
- 升级 发布 v0.5.3
v0.5.2 (2024-10-20)
- 优化 优化工具类与加密相关工具
v0.5.1 (2024-10-11)
- 新增 奠基解决方案与基础库,搭建框架整体骨架
- 新增 新增鉴权授权、工作单元、后台任务、领域驱动、缓存等核心基础设施项目
- 新增 新增 ORM 数据库访问、客户端库与序列化项目
- 新增 新增代码生成、接口文档、网关、插件、工具等配套项目
- 升级 统一 .NET 版本管理,补齐 NuGet 打包文件
