乐此不疲
距离上一次更新过了将近一个月,在此期间 Furion 在 NuGet 平台获得了超 70万次下载量,总下载量约 1100万。伴随着 Furion 影响力越来越大,带来了用户量暴增,同时我们团队投入维护和研发成本也越来越高,但,我们并没有改变初心,依然选择做用户信任且坚实的后盾。
在用户的高频使用和鞭策外加上我们团队三年多的快速响应迭代,Furion 各个模块逐步成熟稳定,在国内选择 .NET 的企业中发挥了不可忽视的重要作用,极大减少企业招人成本、培训成本和维护成本。作为开发团队的我们,非常自豪且有成就感。
舒适陷阱
有时候,将一个开源项目标榜为 ⌈成熟稳定⌋,未必总是有益的。这样做会使项目团队过于满足并陷入舒适区,难以放弃他们辛勤努力所获得的成果。久而久之,这样的态度可能导致项目走向衰退,甚至在竞争激烈的开源行业中消失无踪。
出于对 Furion 项目未来发展的考虑,我们团队对当前版本存在的问题进行了整理,并制定了未来版本的设计要求。为此,我们于今年5月初开始着手编写全新的 Furion。借鉴了之前的经验教训,我相信这一次我们能够取得更进一步的进展。
http://furion.baiqian.ltd/docs/target/
大器晚成
大器晚成,也好过一生蹉跎。
随着年龄的增长,承担的角色和责任也越来越多。曾经年轻气盛、自以为无所不能的时光已经过去,自己已进入了三十而立的年纪。回顾过去,或许是年少轻狂或者缺乏经验,总是对各种事物兴趣广泛,总想效仿别人取得的成就,却往往只是三分钟热度,没有在任何一个领域取得突出的成绩。从另一个角度来看,这也代表着没有建立起坚定的志向,不知道自己真正想要什么,不知道自己追求什么。可以说,有些浪费了时间。
经历了这十年的各种事情后,进入三十而立的阶段,对自己有了更加清晰的认识,渐渐明白了应该如何走下去。除了对过去的反思和认知增长,进入三十而立的年纪也意味着面临着更多的责任和挑战。年轻时的追求和浮躁逐渐被成熟和稳重取代,开始明确自己的价值观和目标,以更有条理和坚定的方式追求自己的梦想。
开源 Furion 本是 ⌈无心之举⌋,未成想它成为我人生 ⌈志心之源⌋。
回到正题
本次更新包含了近半年的更新,对 Furion 的底层进行了非常多的改进。

项目信息
- Gitee:https://gitee.com/dotnetchina/Furion
- Github:https://github.com/MonkSoul/Furion
- 文档:http://furion.baiqian.ltd/
本期更新
更新日志:http://furion.baiqian.ltd/docs/upgrade/
-
新特性
- [新增] 定时任务看板列表支持作业分组名排序 4.8.8.43 ⏱️2023.09.14 #I7YQ9V
- [新增] 验证特性
[DataValidation]支持[Display]和[DisplayName]特性设置{0}4.8.8.42 ⏱️2023.09.01 #I7XB3T - [新增] 监听日志
LoggingMonitor支持配置日志输出级别 4.8.8.41 ⏱️2023.08.25 #I7SRTP - [新增] 多语言支持
L.GetString(name, culture)获取指定区域翻译 4.8.8.41 ⏱️2023.08.04 044b0ed - [新增] 粘土对象
.ConvertTo支持自定义值提供器 4.8.8.40 ⏱️2023.08.03 70d5888 - [新增] 规范化文档枚举支持
[EnumToNumber]特性配置生成前端枚举定义代码是字符串值还是整数值类型,默认为字符串值 4.8.8.35 ⏱️2023.07.06 #I7IZ7S - [新增] 定时任务作业计划
OnChanged事件处理 4.8.8.29 ⏱️2023.06.25 e4c4cf1 - [新增]
Swagger分组信息可在任意配置文件中通过[openapi:分组名]进行配置 4.8.8.26 ⏱️2023.06.20 a70eed3 - [新增]
TP.WrapperRectangle绘制矩形日志模板 4.8.8.25 ⏱️2023.06.14 60ffd76 - [新增]
IServiceScope.CreateDefaultHttpContext拓展方法 4.8.8.24 ⏱️2023.06.07 11a55e1 - [新增] 配置模块
IgnoreConfigurationFiles支持完整的文件通配符 4.8.8.22 ⏱️2023.05.25 #I78ABL - [新增] 定时任务支持二级虚拟目录
VisualPath配置部署 4.8.8.20 ⏱️2023.05.18 #I740IA - [新增] 监听日志
LoggingMonitor支持Razor Pages4.8.8.16 ⏱️2023.05.15 #I7332C - [新增] 定时任务作业处理程序工厂
IJobFactory支持 4.8.8.13 ⏱️2023.05.08 ad58dd3 - [新增]
AES支持对文件(含超大文件)进行加解密 4.8.8.11 ⏱️2023.05.05 1d2265b - [新增] 动态
WebAPI支持text/plain格式的Body参数 4.8.8.9 ⏱️2023.05.04 b49fe50 - [新增] 插件化
IDynamicApiRuntimeChangeProvider接口,可在运行时动态添加WebAPI/Controller4.8.8.8 ⏱️2023.05.04 322ea59 - [新增] 定时任务
Schedular.CompileCSharpClassCode(code)支持动态编译作业处理程序代码 4.8.8.7 ⏱️2023.04.30 fe1e8a1 - [新增]
App.CompileCSharpClassCode(code)动态编译类定义代码 4.8.8.7 ⏱️2023.04.30 fe1e8a1 - [新增] 粘土对象支持结构
struct对象类型 4.8.8.7 ⏱️2023.04.30 a0fa3aa - [新增] 定时任务支持配置
IJob执行异常FallbackAsync回退策略 4.8.8.6 ⏱️2023.04.25 7671489 - [新增] 定时任务支持在非
IOC/DI项目类型中使用 4.8.8.5 ⏱️2023.04.24 #I6YJNB - [新增]
RSA支持对超长字符(超245位)进行分段加解密 4.8.8.2 ⏱️2023.04.19 !788 感谢 @YaChengMu - [新增]
System.Text.Json和Newtonsoft.Json对粘土对象Clay支持 4.8.8.1 ⏱️2023.04.18 #I6WKRZ - [新增] 粘土对象可反射转换成特定
IEnumerable<T>类型:clay.ConvertTo<T>()4.8.8 ⏱️2023.04.13 5d54a65 - [新增]
Serve.IdleHost支持返回http和https协议Web地址(端口) 4.8.8 ⏱️2023.04.13 fdf7885
-
突破性变化
- [移除] 定时任务看板
SyncRate配置,前后端采用最新的SSE推送技术替代 4.8.8.29 ⏱️2023.06.25 e4c4cf1 - [调整] 监听日志
WriteFilter和ConfigureLogger的ActionExecutingContext和ActionExecutedContext类型为FilterContext4.8.8.16 ⏱️2023.05.15 #I7332C - [调整]
IJsonSerializerProvider序列化接口,添加Deserialize反序列化方法 4.8.8.15 ⏱️2023.05.15 !815 感谢 @YaChengMu
- [移除] 定时任务看板
-
问题修复
- [修复] 动态
WebAPI不能正确移除AppService命名的Service问题 4.8.8.47 ⏱️2023.10.10 #I86NL - [修复] 审计日志不支持
dynamic/JsonElement序列化问题 4.8.8.45 ⏱️2023.09.29 #I84SD5 - [修复]
Scoped.CreateUowAsync作用域工作单元异常无法回滚问题 4.8.8.44 ⏱️2023.09.23 #I833I9 - [修复] 模板引擎高并发读取缓存模板出现线程占用问题 4.8.8.43 ⏱️2023.09.14 #I80ZKB
- [修复] 使用刷新
Token也能通过鉴权检查严重安全Bug4.8.8.42 ⏱️2023.08.28 #I7TII4 - [修复] 粘土对象不支持枚举类型问题 4.8.8.41 ⏱️2023.08.25 #I7VDDL
- [修复] 定时任务因上一版本修改 4e2615b 导致自定义作业触发器异常问题 4.8.8.36 ⏱️2023.07.06 #I7J59D
- [修复] 审计日志解析
DateTime类型参数不是本地时间问题 4.8.8.33 ⏱️2023.06.29 #I7GW32 - [修复] 定时任务因上一版本修改 4e2615b 导致
Cron解析异常问题 4.8.8.32 ⏱️2023.06.28 #I7GQ5I - [修复] 定时任务设置额外数据不支持
long/int64类型参数问题 4.8.8.31 ⏱️2023.06.28 4e2615b - [修复] 定时任务休眠毫秒数大于
int.MaxValue时出现ArgumentOutOfRangeException4.8.8.27 ⏱️2023.06.21 #I7F6ZT - [修复]
Cron表达式步长解析器错误 4.8.8.25 ⏱️2023.06.14 #I7D9XU - [修复] 修复
ExpandoObject.ToDictionary()转换异常 4.8.8.25 ⏱️2023.06.14 #I7BY0P - [修复] 配置友好异常
FriendlyExceptionSettings:DefaultErrorMessage无效问题 4.8.8.23 ⏱️2023.05.31 #I79LIG - [修复]
Swagger进行分组后Tags不能进行分组过滤问题 4.8.8.22 ⏱️2023.05.25 #I78A55 - [修复] 因 9d8cb82 代码提交导致命名服务解析异常问题 4.8.8.21 ⏱️2023.05.18 #I76JZR
- [修复] 因 9d8cb82 代码提交导致服务
AOP异常拦截问题 4.8.8.17 ⏱️2023.05.15 #I73A8E - [修复] 动态
WebAPI自定义路由模板参数和自动拼接参数冲突问题 4.8.8.15 ⏱️2023.05.15 #I72ZZ2 - [修复] 远程请求在被请求端返回非
200状态码但实际请求已处理也抛异常问题 4.8.8.14 ⏱️2023.05.12 b14a51f - [修复]
App.CompileCSharpClassCode(code)运行时添加匿名程序集编译异常问题 4.8.8.8 ⏱️2023.05.04 322ea59 - [修复]
LoggingMonitor打印泛型类型如果存在多个泛型参数问题 4.8.8.8 ⏱️2023.05.04 8d9cb74 - [修复] 脱敏处理如果字典存在重复词导致异常问题 4.8.8.4 ⏱️2023.04.23 #I6Y19K
- [修复] 远程请求
Body参数为粘土对象Clay类型序列化有误 4.8.8.1 ⏱️2023.04.18 #I6WKRZ - [修复]
Serve.IdleHost获取随机端口的本地地址带$符号问题 4.8.8 ⏱️2023.04.13 ed6f292
- [修复] 动态
-
其他更改
- [调整]
[UnitofWork]支持在Class中指定,解决Pages应用警告问题 4.8.8.42 ⏱️2023.09.01 #I7X51E - [调整] 取消远程请求
GET/HEAD不能传递Body的限制 4.8.8.39 ⏱️2023.08.02 8113460 - [调整] 规范化文档枚举生成
json格式,由int32改为string4.8.8.34 ⏱️2023.07.02 #I7HOPR - [调整] 规范化文档默认
Title解析规则,不再自动添加空格 4.8.8.26 ⏱️2023.06.20 24b7a47 - [调整] 组件
Component模式支持[DependsOn]支持继承 4.8.8.16 ⏱️2023.05.15 #I733RF - [调整] 定时任务
GC回收逻辑,避免高频添加作业导致尾延迟问题 4.8.8.3 ⏱️2023.04.21 #I6XIV8 - [调整] 定时任务日志设计,减少不必要的日志输出 4.8.8.3 ⏱️2023.04.21 #I6XI2L
- [调整]
-
文档
- [新增]
Jwt身份验证过程监听文档 - [新增] 事件总线
Redis集成文档 - [更新] 粘土对象文档、虚拟文件系统文档、序列化文档、事件总线文档、远程请求文档、数据加密文档、安全授权文档、动态
WebAPI文档、定时任务文档、JSON序列化文档、App静态类文档、规范化文档、配置文档
- [新增]
-
贡献者
- 陶泥 (@ncs48620) !848
- handsome_by (@handsomeboyyl) !842
- 拉风的 CC (@LFDCC) !841
- Felix Hoi (@felixhoi) !839
- zetaluoxin (@zetaluoxin) !834
- SongXinXin (@goodsxx) !832 !833
- 阿炬 (@quejuwen) !813
- KaneLeung (@KaneLeung) !808
- 蒋状先生 (@JiangZhuangXianSheng) !806
- NeoLu (@neolu) !804
- 蓝色天空 (@lds2013) !796
- YaChengMu (@YaChengMu) !788 !815