Skip to main content

v1 版本(归档)- 更新日志

Furion 框架升级/发版规则

升级前重点关注可能造成【破坏性】的标签类型

版本号规则:主版本号.次版本号.修订版本号.迭代版本号

  • 只要【确认】为框架 bug,则当天修复,当天发版,修订版本号 加 1
  • 只要 .NET SDK 版本更新,则当天升级,当天发版,修订版本号 加 1
  • 如果 .csproj 文件有变更,则当天发版,修订版本号 加 1
  • 如果新增 扩展包,为了版本号统一,则当天发版,修订版本号 加 1
  • 如果涉及到代码重构,则当天发版,次版本号 加 1,修订版本号 清 0
  • 如果 .NET SDK 主版本号升级,则当天发版,主版本号 加 1

如有意外不能当天发版,则会在 Issue 中说明具体发版时间,正常不会超过 3 天。

dotNET China/Furion

v1.19.0 (已发布)

  • 新特性
    •   EFCore 5.0 支持 SqlServer 2005-2008 数据库 #I3HZZ6
    •   Sql 高级代理支持模板替换了 #I3HHWU #I3HH2T
    •   PBKDF2 加密 #I3HN7A
    •   常用的 JSON 操作方法 #I3HUYO
    •   所有解析服务的方法都支持传入 IServiceProvidier 参数 #I3HXEU
  • 突破性变化
    •  .NET 5 SDK 至 5.0.5 版本
  • 问题修复
    •   远程请求 application/x-www-form-urlencoded 自动被转码了 #I3HDPC
    •   ISqlDispatchProxy 调用带返回值的存储过程出错 #I3HISS
    •   多数据库工作单元异常无法回滚数据 #I3I2KN #I3HYN5
    •   Serilog 日志生成太多文件 #I3I2PN
    •   1.18.0 版本数据库连接池存在连接泄漏问题 #I3I5KO
    •   Sqlite 提示事务已完成异常 #I3I9F2
  • 其他更改
    •   视图模板功能,默认支持可枚举泛型类型 #I3GYEE
    •   开发阶段 MiniProfiler 打印数据库相关信息 #I3I8VQ
    •   EFCore 5.0 未提供 Sqlite 数据库 DataAdapter 的支持 #I3I9FC
  • 文档变化
    •   数据库上下文、多租户、仓储、日志、序列化等文档。
  • 问答答疑
    •   建议 MVC 模式下增加 Furion 的功能 #I3GY4R
    •   数据库关联操作 #I3H5QP
    •   1.17.5 版本 suagger 无法生成 swagger.json #I3HGPZ
    •   Serilog 扩展+dll 启动与 swagger 的 MiniProfiler 冲突 #I3HWJM
    •   Sql 高级代理返回 DataTable 时,结果为空取不到记录 #I3HUWG
    •   Task.Run 操作数据库问题 #I3HZ9D

v1.18.0 (已发布)

  • 新特性
    •   Oracle 11 版本支持 #I3EVL5
    •   Mysql 官方包 MySql.EntityFrameworkCore 支持 #I3E6J1
    •   全局配置 WebApi 参数 [FromQury]#I3EFYJ
    •   公开框架底层依赖注入扫描注册扩展 services.AddRisterTypes(types) #I3EIV3
    •   SqlSugar 工作单元特性 #I3EJO5
  • 突破性变化
  • 问题修复
    •   数据库上下文池一旦有上下文操作失败还数据库上下文出现二次提交数据库的问题 #I3EIJJ
    •   不同数据库命令参数前缀都添加了 @ 处理 #I3EBJP
    •   尝试修复事件总线线程安全问题 #I3EGSB #PR236
    •   HttpContextExtensionsSignoutToSwagger 方法无效 #I3EHNQ
    •   如果动态 WebApi 贴了 [ApiController] 特性后,导致路由参数重复生成 #I3EOQQ
    •   如果没有任何 webapi 控制器时,文档报错 #I3EVLB
    •   依赖注入泛型类型注册失败 #I3EX66
  • 其他更改
    •   SqlSugar 扩展库仓储 Context 属性类型未 SqlSugarClient #I3EHXA
    •   刷新 Token 黑名单 Redis 中分组 #I3EQWO
    •   远程请求在请求拦截次发起二次请求导致异常问题 #I3ER71
    •   多租户默认缓存改为分布式缓存 #I3EXEU
  • 文档变化
    •   数据库操作文档 #I3E84X
  • 问答答疑
    •   如何方便的获取 IDynamicApiController API 产生的 url 和 谓词 #I3ED17
    •   Code First -执行命令 Add-Migration 遇到了问题 #I3EHD0
    •   tools v1.16.0 无法生成实体,一直提示 Missing required argument <PROVIDER>. #I3ENZ8
    •   Authorize 的 Logout 按钮,无法实时请空 token#I3EOF9

v1.17.0 (已发布)

  • 新特性
    •   动态 WebAPI 支持继承基类配置特性 #I3D5PX
    •   远程请求支持 multipart/form-data 内容类型处理 #I3D7KG
    •   字符串加密扩展 #I3DHBW
    •   新增远程请求可直接下载返回值内容转为 string 类型 #I3DIGR
    •   远程请求地址支持模板引擎 #I3D5Y8
    •   [DataValidation] 错误消息支持 string.Format 操作 #I3E08W
    •   远程请求 HttpRequestMessage 扩展方法 AppendQueries() 追加更多 query 参数扩展 #I3E3DI
  • 突破性变化
    •   IRepository.AsAsyncEnumerable() 返回值 #I3DIQ1,调整为:rep.AsQueryable().ToListAsync()
  • 问题修复
    •   数据验证失败后也打印了成功的字段 #I3CVBS
    •   远程请求配置 contentTypeapplication/x-www-form-urlencoded 无效问题#I3CWBS
    •   远程请求无法打印完整的请求地址,比如配置了 HttpClient 之后 #I3CY42
    •   程序启动时排除默认配置文件算法不对,应该采用正则表达式匹配 #I3D9E7
    •   远程请求成功请求拦截不生效 #I3DOE4
    •   Dapper 扩展数据库切换为 oracle 时,系统找不到指定的文件 Oracle.ManagedDataAccess.Core #I3DYM3
  • 其他更改
    •   获取 JWT token 信息支持配置 Token 前缀,如 Bearer #I3DJIV
    •   刷新 Token 黑名单存储方式,将内存缓存调整为分布式缓存 #I3DPBR
  • 文档变化
    •   远程请求文档 #I3CPJO
  • 问答答疑
    •   LinqExpression.And 没有 2 个参数的方法 #I3CXKZ
    •   异常信息 如何记录到数据库中:) #I3DDGO
    •   无键实体选用 IEntityNotKey #I3DWRF
    •   根据主键删除一条记录不成功,无错误信息 #I3DWWF
    •   如何自定义接口返回格式 #I3DZN6
    •   DynamicApiController 如何在运行时决定是否公开一个 Action #I3D5UL
    •   Furion.DatabaseAccessor.DbHelpers 方法:ConvertToDbParameters 是不是应该过滤掉贴 NotMapped 的特性 #I3E2XS

v1.16.0 (已发布)

  • 新特性
    •   IDGenerator 雪花 ID 算法,感谢 idgenerator 作者提交 PR #PR204 #I3B60S
    •   DbContext 刷新多租户缓存扩展方法 #I39N5U
    •   自定义配置单个控制器名称规范,如小写路由 #I3A5XL
    •   获取当前选择区域语言方法 #I3BSDH
  • 突破性变化
    •  .NET 5 SDK 至 5.0.4 版本 #I3ASTL
    •   远程请求所有功能 #I2LB7M
    •   JSON 序列化功能,提供统一的抽象接口,方便自由替换 JSON#I39GT9
    •   验证失败返回消息模型及规范化接口验证参数 #I3AFQW
    •   插件式开发热插拔功能,实现动态加载卸载 #PR200, 感谢 @SamWangCoder
    •   JsonSerializerUtility 静态类及移除属性大写序列化扩展配置 #I3AFRJ
  • 问题修复
    •   MVC 模式下不支持验证自定义验证逻辑 #I39LM5
    •   验证数值类型正则表达式不支持负数 bug #I39YUV
    •   框架启动时无法加载未被引用的程序集 bug #I3A3Z4
    •   EFCoreRepository.IsAttached() 方法判断错误 bug #I3A824
    •   动态API 驼峰显示配置无效 bug #I3AF32
    •   cli.ps1 不支持新版本 EFCore bug #I3APO9
    •   EFCore 实体配置 [Table] 特性无效 bug #I3BAYH
    •   动态 WebAPI CheckIsSplitCamelCase bug #I3BLKX
    •   动态 WebAPI 配置保留 Action 的 Async 后缀无效问题 #I3C3DA
    •   JWT Token 刷新后旧的刷新 Token 依旧可用 bug #I3C8ZH
    •   多语言 Razor 视图变量多语言乱码问题 #I3CBMU
  • 其他更改
    •   默认序列化提供器 System.Text.Json 反序列化字符串时区分大小写问题 #I3BSXV
    •   优化 MessageCenter 性能问题 #I39PRR
    •   数据库上下文池小性能优化
  • 文档变化
    •   Docker 环境下自动化部署 #PR209
    •   JSON 序列化 文档 #I3B6D8
    •   跨域、安全授权、即时通信文档、多语言、规范化文档
  • 问答答疑
    •   Furion.Extras.DatabaseAccessor.SqlSugar 配置多个数据库打印 SQL 语句问题 #I39PDC
    •   ORACLE 数据库多租户模式下返回值为指定类型时系统卡死 #I39RNH
    •   假删除指向异常 #I39XZA
    •   Furion 多语言配置节是放在 AppSettings 里面还是外面呢? #I3A4SB
    •   没找到数据库上下文 #I3A5HS
    •  QQ 交流群吗? #I3AAM7
    •   Vue3 环境下配置 SignalR 跨域出错 #I3ALQ7
    •   设置 Swagger 参数非必填 #I3AT02
    •   EFCore 调用 Insert 时报 Unknown column 'Discriminator' in 'field list' 异常 #I3B2LC
    •   逆向 mysql 数据库时 cli 出现错误 #I3B64F
    •   Sql 高级代理使用过程中 DateTime 类型的参数序列化失败 #I3AZXK
    •   使用 Mysql 执行 Add-Migration 报错 #I3B8EW
    •   Saas 多租户模式-独立 Database 模式下无法获取 Tenant, 导致无法自动切换的问题#I3AVXU
    •   如何自定义 WebAPI 统一结果模型 #I3BBYW #I3BBYV
    •  Web.Entry 项目新建了一个 Controller,多了未知方法 #I3BKH5
    •   AOP 拦截如何解析服务 #I3BUM3
    •   动态 WebAPI 返回参数被省略 #I3C2XR
    •   如何设置某一个接口响应数据不自动转小写,按原始字段名返回 #I38L9B
    •   code first 如何配置自动迁移 #I3CCR0
    •   webapi 混合授权如何区分不同系统 #I3CJCY
    •   EFCore 不支持递归无限级遍历关系 #I3CET9

v1.15.0 (已发布)

  • 新特性
    •   跳过特定实体数据库操作监听特性 #I386LB
    •   IEntityChangedListener 增加对 OldEntity 的支持 #I385X2
    •   实时通信自动配置集线器扩展及特性 #I387QX
    •   Mapster 扩展支持 IMapper 依赖注入方式 #I38C7C
    •   [AppDbContext] 特性默认构造函数 #I38J97
    •   UnifyContext.GetExceptionMetadata(context) 返回错误码支持 #I38ONX
  • 突破性变化
  • 问题修复
    •   多次循环中调用 Db.GetNewDbContext() 还是获取到同一个对象 #I38NNP
    •   Swagger 过滤掉 object 类型属性问题 #I38FHL
    •   同一类不支持多继承 IEntityChangedListener 问题 #I38UQJ
    •   自定义序列化属性名称导致验证失败属性不匹配问题 #I38W8Z
  • 其他更改
    •   代码不规范命名导致开发者阅读代码时产生歧义
  • 文档变化
    •   FluentValidation 集成文档 #I38IOT
  • 问答答疑
    •   Furion 框架版本向下兼容问题 #I38WMZ

v1.14.0(已发布)

  • 新特性
    •   EFCore 5.0 的 Oracle 数据库支持 #I37Z8E
    •   控制是否在开发环境下显示数据库连接信息 #I37YQ2
    •   [NonUnify] 支持在类中贴此特性 #I359Q6
    •   网络请求 字符串 HttpClient 拦截器 #I35F3E
    •   HttpContextHttpRequest 获取远程地址扩展 #I3688Z
    •   services.AddMvcFilter<> 添加 Mvc 过滤器扩展 #I368BH
  • 突破性变化
    •   框架依赖的.NET 5 SDK 至最新版 5.0.3 #I37YQQ
    •   Swashbuckle.AspNetCore 组件包到 6.0.x 版本 #I37EZK
    •   Furion 框架 JWT 扩展类,只在 Furion.Extras.Authentication.JwtBearer 中保留 #I35D59
  • 问题修复
    •   传入错误 JWT Token 字符串导致自动刷新 Token 出现字符串边界值异常 bug #I34ZE5
    •   瞬时作用域数据库上下文也会自动加入工作单元导致写日志时连锁异常 bug #I37WTV
  • 其他更改
    •   获取系统环境参数的性能 #I36SR5
    •   Furion 底层添加 Mvc 过滤器代码 #I36SKA
    •   添加默认 Json 序列化时间默认时间格式 #I36SL0
    •   SqlSugar 扩展包到 5.0.2.6 版本 #I36SIG
  • 文档变化
    •   数据库入门文档 #I37Z8S
    •   更新日志文档 #I36PI0
    •   请求审计日志、执行 Sql 更新日志文档 #I36PIK
    •   前端使用 axios 跨域配置文档 #I36PIT
    •   App 静态类获取应用、环境更多信息数据 #I36SOV
    •   英文版 README.md 介绍 #I37QHP

v1.13.0(已发布)

  • 新特性
    •   多语言功能及扩展 #I2DOCL
    •   事件总线功能及消息中心 #I23BKN
    •   Swagger 分组显示隐藏配置 #I2AHH8
    •   Furion.Extras.Logging.Serilog 扩展插件 #I2AAN8
    •   cli.ps 支持 -Namespace 命名空间指定 #I2A175
    •   Swagger 规范化化文档授权失效后自动取消授权锁 #I2AIWC
    •   Request.Body 支持重复读功能,主要解决微信 SDK 问题 #I2AMG0
    •   网络请求功能及文档 #I2APGJ
    •   SqlSugar 扩展包支持打印 sqlMiniProfiler#I2ASLS
    •   Furion.Extras.DatabaseAccesssor.Dapper 扩展插件 #I2ASYA
    •   Furion.Extras.DatabaseAccessor.PetaPoco 扩展插件 #I2AUGA
    •   网络请求字符串扩展方法 #I2CPQ0
    •   SqlSugar 扩展新增 PagedList 扩展 #I2CW99
    •   远程请求支持参数特性验证 #I2CX5L
    •   App.User 获取当前授权用户信息便捷方法 #I2CZLO
    •   规范化文档可配置功能,支持 appsettings.json 配置 #I2D1K9
    •   远程请求拦截器添加方法和方法参数 #I2D2CM
    •   远程请求出错返回默认值支持 #I2D44M
    •   远程请求 body 参数序列化支持设置 PropertyNamingPolicy #I2D685
    •   远程服务接口客户端配置 #I2D7PS
    •   AddInjectUseInject 允许自定义 SecurityDefinitionsSwaggerUI #I2DIMG
    •   [SecurityDefine] 默认构造函数 #I2DNXT
    •   AspectDispatchProxy 动态代理类 #I2DO6I
    •   [QueryParameters] 特性,支持一键将 Action 参数添加 [FromQuery] 特性 #I2G8TF
    •   动态日志配置及扩展方法 #I2GDGD
    •   WebApi 请求谓词默认规则配置功能 #I2M70X
  • 突破性变化
    •   .NET 5 SDK 到 .NET 5.0.2 版本 #I2D0PZ
    •   框架内所有扩展类命名空间,全部迁移到 Furion.模块.Extensions#I2AH54
    •   Swagger 记住授权存储方式,替换 Session 存储方式为 LocalStorage 方式 #I2AKUA
    •   Furion 框架包描述文件,减少框架体积 #I2APAU
    •   App.CanBeScanTypesApp.EffectiveTypes #I2B0ZR
    •   App.ServiceProvider 属性并移除 App.GetDuplicateXXX 方法 #I2CYZE
    •   Db.GetDuplicateDbContextDb.GetNewDbContext #I2CZ04
    •   Db.GetSqlDispatchProxyDb.GetSqlProxy #I2DO9T
    •   Aop 服务拦截器,支持异步、同步两种方式 #I2B9HQ
    •   网络请求所有功能 #I2BMR7
  • 问题修复
    •   Swagger 规范化化结果不一致 bug #I2ACF3
    •   数据库新增或更新忽略空值操作方法报空异常 #I2AB6C
    •   Startup.cs Aop 全局拦截无效 #I2A7T2
    •   Token 过期后自动刷新 Token 无法获取最新的用户信息 bug #I2AWQI
    •   [ApiDescriptionSettings(Tag="xx")] 导致 swagger.json 报错 bug #I2B47R
    •   Mysql sql 数据库查询结果 tinyint 类型转换出错 bug #I2BEBM
    •   规范化结果多次包裹类型 bug #I2BHHZ
    •   动态 Api 基元类型数组问题 #I2BMS5
    •   sql 查询枚举类型转换异常 bug #I2BS2Y
    •   string.SqlQuerizeAsync<T1>() 扩展返回错误 bug #I2BSTS
    •   动态 Api 子类重写父类方法并取别名后 Swagger 异常 bug #I2C9VP
    •   网络请求 application/json 序列化大小写问题 #I2CRJC
    •   多数据库定位器实体嵌套关联 bug #I2CVN0
    •   跨域响应头设置无效 bug #I2CW5T
    •   远程网络请求代理打印到 MiniProfiler bug #I2CZBC
    •   远程请求响应拦截器 bug #I2D4DG
    •   SqlSugar 框架 AsQueryable() 一直追加参数 #I2DH1D
    •   自动刷新 Token 空异常 bug #I2DO29
    •   生成 JWT Token 不传过期时间出现验证 401 bug #I2DO8L
    •   AppStartup 排序无效 #I2DVD2
    •   未启用多语言服务时友好异常和验证出现空异常 #I2ECUJ
    •   数据校验字母和数字组合无法匹配 bug #I2EF2Q
    •   数据校验手机或固话无效 bug #I2M5IZ
    •   Dapper 扩展解析 SqlConnection 异常 bug #I2M5P2
    •   开启多语言后,EF 迁移异常 bug #I2M7DT
    •   IEntityTypeBuilder 不支持多重继承 bug #I2PAOD
    •   JwtHandler 设置自动刷新后,匿名访问无法通过 bug #I2SDOX
    •   Dapper 扩展中 SqlServer 数据库获取连接对象类型 bug #PR159
  • 其他更改
    •   Sql 查询结果映射检查 [NotMapper] 特性机制 #I34XD0
    •   依赖注入时排除 IDynamicApiController 接口 #I2ECTG
    •   MD5 加密性能 #PR158
  • 文档变化
    •   文档首页 #I34XBR
    •   网络请求文档 #I2APGJ
    •   多语言文档 #I2DOCL
    •   文档全文搜索引擎 #I34XAW
    •   全局静态类类型 #I34XB4
    •   框架可配置选项文档 #I34XB9
    •   事件总线文档 #I34XBI
    •   数据加解密文档 #I34XC0
    •   贡献指南文档 #I34XC8
    •   HttpContext文件上传下载 博客文章 #I34XCB
    •   文档小调整,小优化
  • 问答答疑
    •   跨域设置无效 #I2ASNJ
    •   MVC 视图无效,原因是 .cshtml 文件没有设置为 内容 #I2AXUU
    •   Sql 操作可以实现事务吗?#I2B0NX
    •   IRepository 操作数据库会打开多次数据库连接 #I2BB7B
    •   如何进入自定义 AppAuthorizeHandler 断点 #I2BGXY
    •   SqlSugar 注入问题 #I2C2AQ
    •   建议增加 API 签名验证,时效验证 #I2C6ET
    •   多数据库多租户同时使用 Add-Migration 报错 #I2CEHS
    •   ISqlSugarRepository 没有 Getxxx 方法 #I2CJLZ
    •   cli.ps1 如何将 sql 里的表导出成 model#I2CSUL
    •   手动修改 Swagger 终结点路径无效 #I2D608
    •   DefaultDbContext 不能识别 #I2DCZX
    •   各分层项目 Startup.cs 支持 Configuration #I2DDUP
    •   Aop 无法拦截,无效 #I2DEY8
    •   mysql 执行 Add-Migration 报错 #I2DSB8\
    •   Entity 创建时间和是否删除添加默认值 #I2E04H
    •   swagger 中多个 servers 设置 #I2E0IF
    •   全局筛选器 没有执行 #I2E5R4
    •   多数据库定位器疑问 #I2E77T
    •   cli.ps 逆向工程 Mysql 数据库报错 #I2E7I5
    •   Swagger 开发环境 applicationsettings.json 中文乱码 #I2EAG1
    •   增加指定路径程序集映射 #I2EEO2
    •   动态编译 cs 脚本文件 #I2EH66
    •   自定义中间件,返回的错误没有规范化结果 #I2NV8S
    •   Swagger 循环引用设置生成文档层级无效 #I2PLQQ
    •   配置文件支持 yaml 文件吗? #I2TJ3N
    •   修改数据库未 mysql 执行 Add-Migration 报错 #I2VR64
    •   多数据库使用定位器时报错 #I2VR8F
    •   Migration To Oracle 异常 #I2WBYQ
    •   开发时显示 Swagger,上线时关闭 Swagger,这需要怎么配置 #I2WOYV
    •   兼容 Mvc 复杂验证没有试验成功 #I2X3GV
    •   Aop 能不能支持无接口的类 #I2X8AS
    •   关于 JWT Token 自动刷新问题 #I2YD4K
    •   能否增加一个扩展的 Entity,增加一些扩展的属性 #I2YDKT
    •   Furion 无法还原包,使用NuGet 下载和通过最新的的脚手架下载都提示这个问题 #I30446
    •   复杂校验与特性验证不能并行 #I3046U

v1.7.0(已发布)

  • 新特性
    •   Furion.Extras.ObjectMapper.Mapster 扩展包 #I29LSJ
    •   Furion.Extras.Logging.Serilog 扩展包 #I2AAN8
    •   Furion.Extras.Web.HttpContext 扩展包 #I29LSM
    •   内置 Token 刷新机制支持 #I29K57
    •   动态数据库上下文,支持运行时执行 OnModelCreating #I28UDT
    •   支持依赖注入排除指定接口 #I29693
    •   规范化结果返回时间戳字段 #I29697
    •   基础 CURD 父类操作例子 #I296SR
    •   sql.Change("定位器完整类型名称") 支持 #I29LAB
    •   UpdateIncludeUpdateExclude 忽略空参数支持 #I29VUG
    •   数据库上下文内置假删除查询过滤器支持 #I29Y2R
    •   忽略空值排除默认时间格式 #I29VUV
    •   MiniProfiler 组件 #I297R9
  • 突破性变化
    •   AppAuthorizeHandler 授权管道为异步处理 #I29MD9
    •   Swagger 默认启用 JWT 授权支持 #I29LI4
    •   HttpContextUtilities 名称改为 HttpContextLocal #I29KQE
    •   UnifyResultContext 名称改为 UnifyContext #I29LLZ
    •   只有执行迁移命令才扫描种子数据 #I29E6P
    •   规范化结果 Successed 属性名为 Succeeded #I29NMV
    •   Mapster 对象组件,采用提供扩展方式 #I29D2M
    •   CacheManager 扩展类 #I29LU1
    •   SaveChanges 拦截器 #I292LO
  • 问题修复
    •   未注册的数据库上下文也被引用全局查询拦截器 bug #I29ZXJ
    •   手动返回 BadObjectResultValidationProblemDetails 结果类型时规范化结果失效 bug #I29ZU9
    •   动态 WebApi KeepNameKeepVerbSplitCamelCase 无效 bug #I29X90
    •   Sql代理 返回 元组 类型出错 bug #I29SMV
    •   401,403 状态码规范化返回值属性变大写 bug #I29M8Y
    •   HttpContext 空异常 bug #I29LU4
    •   接口无返回值没有应用规范化结果 bug #I29GT7
    •   前端 Less 配置文件导致主机启动失败 bug #I29E7P
    •   执行 sql 结果转泛型后属性重复赋值 bug #I29BUO
    •   Swagger 关闭 MiniProfiler 之后 组中组 失效 #I29789
    •   未启用规范化结果时异常返回 System.Object 字符 #I2969A
    •   正数数据验证 0 也验证通过 bug #I2955T
    •   非泛型类集成泛型接口依赖注入 bug #I294YT
    •   Swagger 不支持 new 覆盖父类的 bug #I28Z1A
    •   JsonSerializerUtility 没有公开 bug #I28WMI
    •   SqlSugar 扩展查询泛型类型注册异常 bug #I28VMT
    •   Furion Tools 不支持生成不同命名空间的实体 bug #I2A175
    •   全局拦截器无效 bug #I2A7T2
    •   新增或更新忽略空值空异常 bug #I2AB6C
  • 其他更改
    •   Token 生成加密算法 #I29KIH
  • 文档变化
    •   日志文档 #I28Y9D
    •   数据库上下文、实体拦截器、配置、一分钟入门等等文档
  • 问答答疑
    •   Swagger 如何实现授权访问 #I294F2
    •   如何实现多个数据库多对多实体配置 #I29G6S
    •   动态 WebApi 支持文件上传吗 #I29R5E
    •   多个数据库上下文无法生成迁移代码 #I2A6II

v1.4.0(已发布)

  • 新特性
    •   Furion 支持二级虚拟目录部署功能 #I28B77
    •   Furion.Template.RazorWithWebApi 脚手架 #I28QGI
    •   Furion.Template.BlazorWithWebApi 脚手架 #I27Z3O
    •   EFCore 时态查询扩展 #I28AJ
    •   [AppDbContext(连接字符串,数据库类型)] 配置支持 #I28QTB
    •   DateTimeOffsetDateTime 扩展方法 #I27MQA
    •   ValidationTypes 验证正则表达式智能提示 #I2801V
    •   ValiationTypes.WordWithNumber 验证 #I2805
    •   获取客户端和服务端 IP 地址 #I28QV9
  • 突破性变化
    •  .NET 5.0 版本至.NET 5.0.1 版本 #I28QU
    •   视图引擎功能,优化不规范命名和新增字符串模板编译 #I28G0S
    •   数据库实体查找算法,并优化性能 #I28QUQ
    •   应用启动初始化性能和数据库第一次自动配置 DbSet 性能
  • 问题修复
    •   多数据库上下文配置定位器后实体无法正确生成 bug #I2888L
    •   多租户数据库上下文实体生成 bug #I2891G
    •   对象验证失败提示消息没有应用 JSON 大小写配置 bug #I27UTX
    •   仓储 InsertUpdate 方法指定 ignoreNullValues 无效 bug #I27UN6
    •   Controller 派生类如果贴了 [Route] 特性后出现在 Swagger 中 bug #I27TN7
    •   SqlScalar 执行 sql 返回 Nullable 类型出现转换失败 bug #I27S2N
    •   [UnitOfWork] 特性异常 bug #I27MLM
    •   sql 静态执行方式和 sql 高级代理无法监听数据库连接状态 bug #I27M4F
    •   更换 Json 序列化库无效 bug,如替换为 Microsoft.AspNetCore.Mvc.NewtonsoftJson #I27M43
    •   Furion Tools 工具生成模型 bug #I27XI5
    •   软删除没有生效 bug #I2804I
    •   Furion Tools 识别带多个 \\ 的连接字符串识别 bug #I280TS#PR91
    •   Furion Tools 无法取消生成 bug #I2816M
    •   DateTimeOffset 转本地时间差 8 小时 bug #I28BA9
    •   启用 bundle js&css 压缩后启动异常 bug #I28KR
    •   ValidationTypes.Required 无效 bug #PR98
    •   规范化结果OnValidateFailed 参数名拼写错误 bug #PR93#PR92
    •   授权管道验证失败还显示结果 bug #PR89
  • 其他更改
    •   README.md 友情连接地址 #PR88
    •   模板脚手架源码,添加 EFCore Tools#PR87
    •   README.md NuGet 图标 #PR85
    •  List<T>DateTable #PR97
  • 文档变化
    •   视图引擎模板文档 #I27ZVA
    •   EFCore 时态查询文档 #I28AJ, 文档地址
    •   仓储文档书写纰漏 bug #PR90
    •   选项文档错误 bug #PR86
    •   实体数据监听器 文档书写错误 bug #PR83
    •   数据库上下文、多数据库、脚手架等文档
  • 问答答疑
    •   希望 api 返回的值自动将 null 转为 ''[] #I286IJ
    •   添加网关功能 #I27TP7,【已关闭】
    •   SqlQuery<T> 获取单条记录方法 #I28M1V
    •   希望可以提供集成 Serilog 例子 #I282J4
    •   如何通过特性配置唯一约束 #I2891L
    •   怎么读取 appsettings.json 数组 #I27WU
    •   IRepository<TEntity> 出现空异常 #I281IE
    •   规范化接口问题问题 #I28NMZ
    •   统一返回值模型中 OnResponseStatusCodes 未执行 #I28NNL

v1.2.0(已发布)

  • 新特性
    •   雪花算法 #I26OXG, #PR78
    •   [AppDbContext] 配置数据库提供器支持 #I27G3T
    •   实体表数据更改监听接口 IEntityDataChangedListener #I278DD, #I278LQ
    •   全局服务接口 AOP 拦截功能 #I278CP
    •   定位器仓储 IDbRepository<TDbContextLocator> #I276Q3
    •   数据库操作 InsertOrUpdate 支持排除空字符串功能 #I272OG
    •   数据库操作 UpdateIncludeUpdateExclude 匿名对象支持 #I271X0
    •   数据验证传入空对象跳过验证支持 #I273R4
    •   应用启动时支持排除特定配置文件自动加载 #I26U0A
    •   单个实体表名前缀支持 #I26LX0
    •   MySql 数据库自动配置默认版本号 #I26XQ6
    •   授权处理程序代码
  • 突破性变化
    •   实体表数据更改监听接口 IEntityDataChangedListener #I278DD, #I278LQ
    •   全局服务接口 AOP 拦截功能 #I278CP
    •   雪花算法 #I26OXG, #PR78
  • 问题修复
    •   视图引擎加载外部程序集出错 bug
    •   依赖注入代理接口报空对象异常 bug
    •   EFCore 取消附加实体出错 bug
    •   数据库仓储在非 Web 请求下出现空异常 bug
    •   多个授权策略共存问题出现无效 bug
    •   友好异常 Oop.Oh 不支持普通方法 bug
    •   获取多租户对象时数据库上下文出现作用域验证失败 bug
    •   工作单元不支持 Sql代理 拦截 bug #I27GST
  • 文档变化
    •   实体数据监听器 文档
    •   一分钟入门、应用启动、官方脚手架、数据库操作指南、对象映射、规范化文档、异常处理、鉴权授权文档

v1.1.0(已发布)

  • 新特性
    •   Db.GetDbContext() 获取默认数据库上下文方法
    •   HttpContextUtility.GetCurrentHttpContext() 获取全局 HttpContext 上下文
    •   App.GetRequiredService<> 解析服务方法
    •   object.GetService<> 对象扩展方法
    •   策略授权 PolicyPipeline 基类方法,支持多重判断授权
    •   JWTEncryption.ValidateJwtBearerToken 手动验证静态方法
    •   全局数据库上下文 InsertOrUpdateIgnoreNullValuesEnabledEntityStateTracked 全局配置
    •   Swagger Jwt授权 全局授权参数 #I26GLR
    •   InsertOrUpdate 支持自定义判断条件功能 #I269Q1
    •   字符串字段小写命名支持 #I2695D
    •   字符串文本对比功能 #I268LE
    •   全局异常特性消息功能 #I2662O
    •   InsertUpdate 数据库忽略空值功能 #I264Q4
  • 突破性变化
    •   Fur 项目名为 Furion
    •   Db.GetRequestDbContext<>() 命名为 Db.GetDbContext<>()
    •   Db.GetDbContext<>() 命名为 Db.GetDuplicateDbContext<>()
    •   App.GetService<> 解析服务的底层逻辑,大大提高了解析服务的性能
    •   授权核心代码,保持和微软一致的授权规范 #I26DCB
    •   App.GetRequestService<> 方法
    •   ValidateJwtBearer Jwt 授权方法,无需手动判断了
  • 问题修复
    •   Furion 官方脚手架生成后编译异常 bug
    •   Tenant 内置属性不是 virtual 修饰 bug
    •   dockerfile 新命名构建失败 bug
    •   自定义角色授权和多个授权共存出现 403 bug #I26H1L
    •   httpContext.GetEndpoint() 空异常 bug #PR73
    •   Oops.Oh 空异常和不支持服务抛异常 bug #I26EFU#I26GM4
    •   cli.ps 生成文件编码乱码 bug #I26DVT
    •   Swagger 文件上传按钮不显示 #I26B6U
    •   规范化结果授权状态码序列化大小写不一致问题 #I26B26
    •   未启用规范化结果时中文乱码 bug #I268T5
    •   MySql 异步异常捕获不到 bug #I265SO
    •   cli.ps1 提示找不到数据库连接字符串 bug #I2647U
  • 其他更改
    •   代码性能小优化和小调整
  • 文档变化
    •   一分钟入门、安全鉴权、数据库等文档

v1.0.3(已发布)

  • 新特性
    •   Mvc 模板脚手架:Fur.Template.Mvc
    •   WebApi 模板:Fur.Template.Api
    •   Mvc/WebApi 模板:Fur.Template.App
    •   Razar Pages 模板:Fur.Template.Razor
    •   Blazor 模板:Fur.Template.Blazor
  • 突破性变化
    •   PagedListSystem.Collections.Generic 命名空间下
    •   解析服务性能问题,底层代码大量优化
  • 问题修复
    •   ApiSears.ControllerEnd不起作用 bug #I25KH6
    •   RemoteRequest 请求完成结果序列化属性大小写问题 #I25I8R
    •   HttpContext.GetEndpoinet() 空异常 bug #PR73
  • 文档变化
    •   入门文档、数据库上下文文档、多数据库操作文档

v1.0.2(已发布)

  • 新特性
    •   Pomelo.EntityFrameworkCore.MySql 最新.NET 5 包配置 #I24ZQK
    •   .AddDateTimeJsonConverter(format) 时间格式序列化配置
    •   DateTimeDateTimeOffset 类型序列化格式配置 #I253FI
  • 突破性变化
    •   Mapster 包至 7.0.0
    •   App.Services 名为 App.ServiceProvider
    •   App.ApplicationServicesApp.GetRequestService<>()
    •   非 Web 主机注入扩展
  • 问题修复
    •   services.AddFriendlyException() 缺少配置注入 bug
    •   数据库上下文池被释放和高并发下内存溢出 bug #I2524K#I24UMN
    •   Sql代理 返回空数据时异常 bug #I24TCK
    •   工作单元 [UnitOfWork] 多数据库被释放 bug #I24Q6W
  • 其他更改
    •   EntityBaseEntity 所有属性为 vitural 修饰
    •   Jwt 读取和解析性能
    •   优化代码支持 C# 9.0 最新语法
    •   MD5 加密性能 #PR71
    •   无用或未使用代码
  • 文档
    •   数据库上下文、多数据库、一分钟入门文档

v1.0.0(已发布,.NET5)

  • 新特性
    •   网络请求 RemoteRequest 组件 #I1YYWD
    •   .AddInjectBase() 注入,只包含基础服务注入
    •   所有服务都支持 IServiceCollectionIMvcBuilder 注入
    •   抛异常状态码设置功能 StatusCode
    •   Swagger 序列化支持 Pascal 属性命名方式
  • 突破性变化
    •   所有的包为 .NET 5 正式版
  • 问题修复
    •   SqlProxy 代理异步处理 bug
    •   数据库类型 DatetimeDateTimeOffset bug
    •   属性首字母大小写序列化不匹配出现 null bug
    •   对象序列化中文出现乱码 bug
    •   默认序列化配置无效 bug
    •   数据库非依赖注入方式提交无效 bug
    •   应用程序池提交所有 DbContext 空异常 bug
    •   Saas 多租户 Tenant 类型字符串属性在 MySql 数据库下出现 longtext 类型 bug
    •   Mvc 自动验证字符串空值 bug #I24M2T
    •   枚举注释被覆盖 bug #I24N6J
    •   忽略规范化结果无效 bug #I24B8P
    •   Swagger 默认 ContentType 不是 applicaiton/json bug #I24F3U
    •   内置 System.Text.JsonNewtonsoft.Json 冲突 bug #I24F3U
  • 其他更改
    •   Fur 框架域名为:https://furion.net
    •   仓储 FromSqlRawFromSqlInterpolated 接口位置
    •   数据加解密性能,#PR70
  • 文档
    •   README.md、框架介绍、数据库上下文、配置选项、多租户、跨域文档