8.3K Star 13.9K Fork 4.1K

GVPdotNET China/Furion

 / 详情

📝 发布 Furion v4.8.7 版本

已完成
拥有者
创建于  
2023-02-22 12:11

版本说明

发布 FurionFurion.ToolsFurion.Xunit v4.8.7 版本,适配 .NET8 Preview.1

https://devblogs.microsoft.com/dotnet/announcing-dotnet-8-preview-1/

本期更新

  • 新特性

    • [新增] 定时任务看板支持自定义刷新频率 SyncRate 功能 4.8.7.43 ⏱️2023.04.12 703b465
    • [新增] Serve.GetIdleHost([host]) 静态方法,可获取一个指定主机的 Web 地址(端口) 4.8.7.43 ⏱️2023.04.12 fdf788
    • [新增] 粘土对象可配置访问不存在 Key 时是抛异常还是返回 null 4.8.7.40 ⏱️2023.04.10 e994d53
    • [新增] 定时任务看板支持完全自定义 RequestPath 入口地址功能 4.8.7.34 ⏱️2023.04.04 24736f6
    • [新增] App.GetServices(type)App.GetServices<T>() 获取服务实例集合 4.8.7.33 ⏱️2023.04.03 c3e9957
    • [新增] 远程请求 [HttpMethod]ToSaveAsync 下载远程文件并保存到磁盘方法 4.8.7.32 ⏱️2023.04.02 bfd02c1
    • [新增] 定时任务一系列 .AlterTo 修改作业触发器触发时间便捷方法 4.8.7.31 ⏱️2023.03.31 0349017
    • [新增] 多语言支持 DateTime 时间格式化配置节点 DateTimeFormatCulture 4.8.7.31 ⏱️2023.03.31 #I6RUOU
    • [新增] Serve.IdleHost 静态属性,可获取一个随机空闲 Web 主机地址(端口) 4.8.7.29 ⏱️2023.03.30 e425063
    • [新增] WinForm/WPF 静态方法 Serve.RunNative() 可配置是否启用 Web 主机功能 4.8.7.26 ⏱️2023.03.29 #I6R97L
    • [新增] WinForm/WPF 支持依赖注入的 Native.CreateInstance<T>() 静态方法 4.8.7.23 ⏱️2023.03.27 53d51c3
    • [新增] WinForm/WPF 快速注册静态方法:Serve.RunNative() 4.8.7.23 ⏱️2023.03.27 53d51c3
    • [新增] 远程请求支持 Content-Typetext/htmltext/plain 处理 4.8.7.22 ⏱️2023.03.27 #I6QMLR
    • [新增] 粘土对象可转换成 IEnumerable<T> 对象并实现 Lambda/Linq 操作 4.8.7.19 ⏱️2023.03.22 2b14ed9
    • [新增] Crontab.IsValid(...) 静态方法,判断 Cron 表达式是否有效 4.8.7.17 ⏱️2023.03.20 #I6OHO4
    • [新增] 日志配置 WithStackFrame,可控制是否输出产生日志的程序集,类型和具体方法 4.8.7.16 ⏱️2023.03.19 5ad6ae2
    • [新增] 定时任务看板 UI 作业列表 最近执行时间 列和优化显示效果 4.8.7.12 ⏱️2023.03.15 26462a8 cb5dd17
    • [新增] 定时任务作业计划/工厂立即执行 RunJob 方法 4.8.7.11 ⏱️2023.03.15 #I6LD9X
    • [新增] 定时任务看板 UI 提供立即执行功能 4.8.7.11 ⏱️2023.03.15 #I6LD9X
    • [新增] 远程请求 HttpRequestMessage 拓展方法 AppendHeaders 4.8.7.10 ⏱️2023.03.14 #I6MVHT
    • [新增] 定时任务作业执行上下文 JobExecutionContext 服务提供器 ServiceProvider 属性 4.8.7.10 ⏱️2023.03.14 02586f8
    • [新增] 定时任务 HTTP 作业,支持定时请求互联网 URL 地址 4.8.7.7 ⏱️2023.03.11 01d4466
    • [新增] 定时任务作业触发器 Trigger 执行结果 Result 和执行耗时 ElapsedTime 属性 4.8.7.7 ⏱️2023.03.11 01d4466
    • [新增] 定时任务作业看板支持查看作业触发器执行结果 Result 和执行耗时 ElapsedTime 属性 4.8.7.7 ⏱️2023.03.11 01d4466
    • [新增] 定时任务休眠时长和唤醒时机日志输出 4.8.7.6 ⏱️2023.03.08 #I6LANE
    • [新增] Sql 高级拦截支持返回 IEnumerable<T>T[] 类型值 4.8.7.5 ⏱️2023.03.07 f2ca2d3
    • [新增] .m3u8.ts 文件类型 MIME 支持 4.8.7.5 ⏱️2023.03.07 #I6KKEM
    • [新增] 审计日志 LoggingMonitor 支持对参数贴 [SuppressMonitor] 特性跳过记录 4.8.7.3 ⏱️2023.03.01 #I6IVGW
    • [新增] 审计日志 LoggingMonitor 监听 TraceIdThreadIdAccept-Language 4.8.7.1 ⏱️2023.02.27 df35201
    • [新增] 规范化结果 UnifyContext.GetSerializerSettings(string) 静态方法 4.8.7.1 ⏱️2023.02.27 #I6HM7T
  • 突破性变化

    • [调整] 定时任务动态作业 DynamicJob 委托/方法签名 4.8.7.10 ⏱️2023.03.14 6d56b53
    • [升级] 适配 .NET8 Preview.1 4.8.7 ⏱️2023.02.22
    • [升级] 脚手架支持创建 .NET8 Preview.1 项目 4.8.7 ⏱️2023.02.22
  • 问题修复

    • [修复] 远程请求获取 Cookies 时如果包含相同 Key 异常问题 4.8.7.44 ⏱️2023.04.12 #I6V3T7
    • [修复] 粘土对象转换为 Dictionary<string, object> 类型异常 4.8.7.41 ⏱️2023.04.11 f96baeb
    • [修复] TP.Wrapper 静态类不能准确识别多行内容问题 4.8.7.40 ⏱️2023.04.10 #I6UAC8
    • [修复] 粘土对象不支持运行时动态设置携带特殊字符的 Key4.8.7.39 ⏱️2023.04.10 6572515
    • [修复] 视图引擎模型为匿名泛型集合类型时出现类型转换异常 4.8.7.38 ⏱️2023.04.07 !773
    • [修复] 定时任务通过作业 Id 删除作业不能删除作业触发器问题 4.8.7.35 ⏱️2023.04.05 312ca35
    • [修复] 动态 WebAPI 去除叠词类型命名如 ServiceService 前后缀异常问题 4.8.7.32 ⏱️2023.04.02 #I6SB3Z
    • [修复] 因 4.8.7.22 版本导致动态 WebAPI 类型注释丢失问题 4.8.7.27 ⏱️2023.03.29 #I6QM23
    • [修复] 粘土对象遍历对象键值对因 4.8.7.19 版本更新导致异常 4.8.7.25 ⏱️2023.03.28 #I6R4ZU
    • [修复] Swagger UI 不显示 ControllerBase 派生类注释 4.8.7.22 ⏱️2023.03.27 #I6QM23
    • [修复] 日志输出 JSON 格式漏掉了 UseUtcTimestampTraceId 键值 4.8.7.21 ⏱️2023.03.27 5c90e65
    • [修复] 启用规范化结果后导致 WebSocket 连接断开时出现异常 4.8.7.20 ⏱️2023.03.23 #I6PI5E
    • [修复] 定时任务作业状态为 积压:0归档:6 时调用立即执行后不能恢复上一次状态 4.8.7.18 ⏱️2023.03.21 6f5aae8
    • [修复] 使用达梦数据库执行 sql 不能自动修复命令参数前缀 4.8.7.18 ⏱️2023.03.21 #I6OK4T
    • [修复] Cron 表达式 * 符号解析器不够严谨,如:*1111aaaaa 也被解析为 * 4.8.7.17 ⏱️2023.03.20 #I6OHO4
    • [修复] 定时任务更新作业 null 值默认被跳过问题 4.8.7.17 ⏱️2023.03.20 #I6OHO4
    • [修复] 视图引擎不支持强制转换的 (object)model 类型 4.8.7.16 ⏱️2023.03.19 #I6O3BD
    • [修复] 启用请求 Body 重复读且在授权之前读取导致非 GET/HEAD/OPTION 请求异常 4.8.7.15 ⏱️2023.03.19 #I6NX9E
    • [修复] 定时任务生成 SQL 语句没有处理 ' 转义问题 4.8.7.15 ⏱️2023.03.19 #I6NXKA
    • [修复] 数据验证 ValiationTypes.GUID_OR_UUID 不支持大写问题 4.8.7.14 ⏱️2023.03.16 #I6NP22
    • [修复] Blazor 脚手架出现 blazor.server.js 不能加载问题(4044.8.7.13 ⏱️2023.03.16 #I6NOBQ
    • [修复] 定时任务服务在停止进程时会卡住 30秒 问题 4.8.7.8 ⏱️2023.03.13 #I6MI9I #I6MHOU
    • [修复] 定时任务看板删除不存在的作业触发器出现空异常 4.8.7.7 ⏱️2023.03.11 01d4466
    • [修复] 日志消息没有处理 \n 换行符对齐问题 4.8.7.6 ⏱️2023.03.10 759bcc5
    • [修复] 审计日志 LoggingMonitor 对特定参数贴有 [FromServices] 特性依旧记录问题 4.8.7.3 ⏱️2023.03.01 17b134e
    • [修复] Swagger 接口排序同时指定 TagOrder 之后无效 4.8.7.2 ⏱️2023.03.01 #I6IQDI #I6IP66
  • 其他更改

    • [调整] Blazor + WebAPI 脚手架模板,默认添加授权支持 4.8.7.37 ⏱️2023.04.07 #I6OM8O 544f80d
    • [调整] 定时任务动态委托作业持久化逻辑,采用不触发持久化操作 4.8.7.36 ⏱️2023.04.06 7bb58b6
    • [调整] 多语言中间件 app.UseAppLocalization() 添加 Action<options> 委托参数 4.8.7.30 ⏱️2023.03.31 #I6RUOU
    • [调整] 定时任务 Http 作业 HttpMethod 属性拼写错成 HttpMedhod 4.8.7.24 ⏱️2023.03.28 !756
    • [调整] 粘土对象 number 类型处理,若含 .double 类型,否则转 long 类型 4.8.7.24 ⏱️2023.03.28 e82e883
    • [调整] 视图引擎默认程序集,追加 System.Collections 程序集 4.8.7.16 ⏱️2023.03.18 #I6O3BD
    • [调整] 定时任务配置选项 BuilSqlType 属性命为 BuildSqlType 4.8.7.11 ⏱️2023.03.15 92117b8
    • [调整] 定时任务查看作业触发器运行记录由保存 10条 改为 5条 4.8.7.7 ⏱️2023.03.07 01d4466
    • [调整] 脚手架模板,默认启用主流文件类型 MIME 支持 4.8.7.5 ⏱️2023.03.07 e35cdab
    • [调整] 审计日志 LoggingMonitor 返回值泛型字符串显示格式 4.8.7.1 ⏱️2023.02.27 df35201
  • 文档

    • [新增] 发布桌面程序 文档
    • [新增] Native 全局静态类文档
    • [新增] ASP.NET 8 集成 文档
    • [新增] .NET7 升级 .NET8 文档
    • [更新] 定时任务文档、中间件文档、规范化结果文档、动态 WebAPI 文档、日志记录文档、事件总线文档、虚拟文件系统文档、Sql 高级代理文档、数据库实体文档、任务队列文档、跨域文档、配置选项文档、安全授权、脚手架文档、粘土对象文档、多语言文档
  • 贡献者


本期亮点

1. LoggingMonitor 支持跳过特定参数记录

Furion 4.8.7.3+ 版本新增 [SuppressMonitor] 特性支持标记参数(支持类型,方法)不被记录,如:

[LoggingMonitor]
public string GetName([SuppressMonitor]SomeType type, int id)   // type 参数将跳过记录
{
    return nameof(Furion);
}

2. Sql 高级代理支持 IEnumerable<T>T[]Tuple<(IEnumerable<T>, T[], T, List<T>) 混合返回值

public interface ISql : ISqlDispatchProxy
{
    [SqlExecute("select * from person where id = @id")]
    Person GetPerson(int id);

    [SqlExecute("select * from person where id = @id")]
    Task<Person> GetPersonAsync(int id);    // 异步

    // ----------------------------------------

    [SqlExecute("select * from person")]
    List<Person> GetPersons();

    [SqlExecute("select * from person")]
    Task<List<Person>> GetPersonsAsync();    // 异步

    // ----------------------------------------    

    [SqlExecute("select * from person")]
    Person[] GetPersons();

    [SqlExecute("select * from person")]
    Task<Person[]> GetPersonsAsync();    // 异步

    // ----------------------------------------

    [SqlExecute("select * from person")]
    IEnumerable<Person> GetPersons2();

    [SqlExecute("select * from person")]
    Task<IEnumerable<Person>> GetPersons2Async();    // 异步

    // ----------------------------------------

    // 更复杂的组合
    [SqlExecute(@"
select * from person where id = 1;
select * from person;
select * from person where id > 0;
select * from person where id > 0;
")]
    (Person, List<Person>, Person[], IEnumerable<Person>) GetPersons();
    
        // 更复杂的组合
    [SqlExecute(@"
select * from person where id = 1;
select * from person;
select * from person where id > 0;
select * from person where id > 0;
")]
    Task<(Person, List<Person>, Person[], IEnumerable<Person>)> GetPersonsAsync();    // 异步
}

3. 定时任务支持 Http 作业

HTTP 请求作业通常用于定时请求/访问互联网地址。

services.AddSchedule(options =>
{
      options.AddHttpJob(request =>
      {
            request.RequestUri = "https://www.chinadot.net";
            request.HttpMedhod = HttpMethod.Get;
            // request.Body = "{}"; // 设置请求报文体
      }, Triggers.PeriodSeconds(5));
});

作业执行日志如下:

info: 2023-03-11 11:05:36.3616747 +08:00 星期六 L System.Logging.ScheduleService[0] #1
      Schedule hosted service is running.
info: 2023-03-11 11:05:36.3652411 +08:00 星期六 L System.Logging.ScheduleService[0] #1
      Schedule hosted service is preloading...
info: 2023-03-11 11:05:36.5172940 +08:00 星期六 L System.Logging.ScheduleService[0] #1
      The <job1_trigger1> trigger for scheduler of <job1> successfully appended to the schedule.
info: 2023-03-11 11:05:36.5189296 +08:00 星期六 L System.Logging.ScheduleService[0] #1
      The scheduler of <job1> successfully appended to the schedule.
warn: 2023-03-11 11:05:36.5347816 +08:00 星期六 L System.Logging.ScheduleService[0] #1
      Schedule hosted service preload completed, and a total of <1> schedulers are appended.
warn: 2023-03-11 11:05:41.5228138 +08:00 星期六 L System.Logging.ScheduleService[0] #15
      Schedule hosted service will sleep <4970> milliseconds and be waked up at <2023-03-11 11:05:46.486>.
info: 2023-03-11 11:05:41.5542865 +08:00 星期六 L System.Net.Http.HttpClient.HttpJob.LogicalHandler[100] #9
      Start processing HTTP request GET https://www.chinadot.net/
info: 2023-03-11 11:05:41.5589056 +08:00 星期六 L System.Net.Http.HttpClient.HttpJob.ClientHandler[100] #9
      Sending HTTP request GET https://www.chinadot.net/
info: 2023-03-11 11:05:44.1305461 +08:00 星期六 L System.Net.Http.HttpClient.HttpJob.ClientHandler[101] #8
      Received HTTP response headers after 2566.7836ms - 200
info: 2023-03-11 11:05:44.1343977 +08:00 星期六 L System.Net.Http.HttpClient.HttpJob.LogicalHandler[101] #8
      End processing HTTP request after 2584.2327ms - 200
info: 2023-03-11 11:05:48.6475959 +08:00 星期六 L System.Logging.ScheduleService[0] #4
      Received HTTP response body with a length of <63639> output as follows - 200
      <!DOCTYPE html><html><head>
            <title>dotNET China | 让 .NET 开发更简单,更通用,更流行</title>
      ......
          </body></html>

4. 调整定时任务动态作业 DynamicJob 委托/方法签名

为了统一动态作业和普通作业的 ExecuteAsync 方法签名,故做出调整。

由:

options.AddJob((serviceProvider, context, stoppingToken) =>
{
      serviceProvider.GetLogger().LogInformation($"{context}");
      return Task.CompletedTask;
}, Triggers.PeriodSeconds(5));

调整为:

options.AddJob((context, stoppingToken) =>
{
      context.ServiceProvider.GetLogger().LogInformation($"{context}");
      return Task.CompletedTask;
}, Triggers.PeriodSeconds(5));

5. 远程请求 HttpRequestMessage 拓展方法 AppendHeaders

如需动态设置,可使用以下方式(添加参数拦截拦截器):

public interface IHttp : IHttpDispatchProxy
{
    // 通过参数拦截
    [Post("https://furion.baiqian.ltd/post")]
    Task<HttpResponseMessage> PostXXXAsync(string name, [Interceptor(InterceptorTypes.Request)] Action<HttpClient, HttpRequestMessage> action = default);
}

调用:

_http.PostXXXAsync("百小僧", (client, requestMessage) =>
{
    requestMessage.AppendHeaders(new Dictionary<string , object> {
        { "Authorization", "Bearer 你的token"},
        { "X-Authorization", "Bearer 你的刷新token"}
    });

    // 也支持对象,匿名方式
    requestMessage.AppendHeaders(new {
        Authorization = "Bearer 你的token",
        Others = "其他"
    });

    // 也可以使用原生
    requestMessage.Headers.TryAddWithoutValidation("Authorization", "Bearer 你的token");
    requestMessage.Headers.TryAddWithoutValidation("key", "value");
});

6. 定时任务立即执行方法

// 带返回值
var scheduleResult = _schedulerFactory.TryRunJob("job1");
// 不带返回值
_schedulerFactory.RunJob("job1");

7. 粘土对象可转换成 IEnumerable<T> 对象并实现 Lambda/Linq 操作

dynamic clay = Clay.Parse("{\"Foo\":\"json\",\"Bar\":100,\"Nest\":{\"Foobar\":true},\"Arr\":[\"NOR\",\"XOR\"]}");

// 将 clay.Arr 转换成 IEnumerable<dynamic>
IEnumerable<dynamic> query = clay.Arr.AsEnumerator<dynamic>();

// 实现 Lambda/Linq 操作
var result = query.Where(u => u.StartsWith("N"))
                  .Select(u => new
                  {
                      Name = u
                  })
                  .ToList();

文档更新

输入图片说明

输入图片说明

评论 (14)

百小僧 创建了任务 2年前
百小僧 添加了
 
重大调整
标签
2年前
百小僧 添加了
 
文档
标签
2年前
百小僧 修改了描述 2年前
百小僧 任务状态待办的 修改为已完成 2年前
百小僧 置顶等级 修改为不置顶 2年前
展开全部操作日志

2023年02月22日(今日),微软发布了 .NET8 Preview.1 版本,花了 4 个小时将 Furion 进行升级适配,解决了 3 处破坏性更改,11 处代码适配调整,超 9000个单元测试 100% 测试通过。

从今日开始,任何 Furion 版本(v0.x,v1.x,v2.x,v3.x,v4.x)都可以直接升级到最新版 v4.8.7,应用层无任何破坏性更改,底层全部做了兼容处理。

同时 Furion v5 彻底无依赖版本也做出相应调整,直接 .NET8 起步。

https://furion.baiqian.ltd/

输入图片说明

输入图片说明

输入图片说明

输入图片说明

输入图片说明

百小僧 修改了描述 2年前

旧版本

输入图片说明

新版本

输入图片说明

支持支持!!!!!

百小僧 修改了描述 2年前
百小僧 修改了描述 2年前
百小僧 修改了描述 2年前
百小僧 修改了描述 2年前
百小僧 修改了描述 2年前
百小僧 修改了描述 2年前
百小僧 修改了描述 2年前
百小僧 修改了描述 2年前

预告 v4 版本最后一个新模块:👍邮件发送👍,将在下一个次版本 v4.8.8 发布。

邮件发送几乎是所有应用系统都必备的功能,过去大家都使用第三方 Mailkit 或者 FluntMail 等第三方模块。所以慎重考虑后,Furion 决定自己写邮件发送功能,不断迭代至完善,这样功能完全可控,出问题第一时间修复,想要什么功能就可以搞。

Furion 已经内置了很多系统必备的模块了,比如日志模块,定时任务模块,模板引擎模块等等,再也不用使用第三方了。😊

功能必须自主可控是 Furion 的初心,v5 版本将实现彻彻底底无第三方依赖,自己写 Swagger,自己写 Mapper

没了第三方,就不用等第三方更新了,只有我的速度才能跟上你们项目迭代的速度,不加班是我们的倔强

冬天-360528197 冬天
回复 百小僧 拥有者
2年前

老版本要是能无缝升级就好了

百小僧 修改了描述 2年前
百小僧 修改了描述 2年前
百小僧 修改了描述 2年前
百小僧 修改了描述 2年前
百小僧 修改了描述 2年前
百小僧 修改了描述 2年前
百小僧 修改了描述 2年前
百小僧 修改了描述 2年前
百小僧 修改了描述 2年前
百小僧 修改了描述 2年前

Furion v4.8.7.10 版本发布,具体改进:

输入图片说明

输入图片说明

百小僧 修改了描述 2年前
百小僧 修改了描述 2年前

2023年03月15日,.NET 8 Preview 2.NET 7.0.5.NET6.0.15 发布

https://devblogs.microsoft.com/dotnet/march-2023-updates/


ASP.NET 8 Preview 2 主要变化

[FromBody] 特性现在支持多个了

输入图片说明

EFCore 8 Preview 2 主要变化

Sqlite 支持 JSON 列了

支持 Tree 型查询了(递归)!重大支持

百小僧 修改了描述 2年前
百小僧 修改了描述 2年前
百小僧 修改了描述 2年前

Furion v4.8.7 版本迭代了 24天 了,没想到还能修复 7个 问题。这是这近一个月修复的所有问题。

当然,问题越来越少,越来越难发现了

输入图片说明

百小僧 修改了描述 2年前
百小僧 修改了描述 2年前
百小僧 修改了描述 2年前
百小僧 修改了描述 2年前
百小僧 修改了描述 2年前
百小僧 修改了描述 2年前

2023年02月22日,发布了 v4.8.7.0 版本

输入图片说明

不知不觉又迭代了一个月,版本到了 v4.8.7.18,包含 21个 新特性,修复 14个 问题,5个 代码调整,文档增加了约 7000多 字。

输入图片说明

输入图片说明


接下来就是 v4.8.8.x 版本(每个版本迭代一个月),主要亮点就是新增 邮件收发模块,明天开始~

百小僧 修改了描述 2年前
百小僧 修改了描述 2年前
百小僧 修改了描述 2年前
百小僧 修改了描述 2年前
百小僧 修改了描述 2年前
百小僧 修改了描述 2年前
百小僧 修改了描述 2年前
百小僧 修改了描述 2年前
百小僧 修改了描述 2年前
百小僧 修改了描述 2年前
百小僧 修改了描述 2年前

Furion v4.8.7.29 版本发布,支持 Web 项目发布成 WinForm/WPF 桌面应用程序啦,类似前端 ElectronTauri 技术

输入图片说明

百小僧 修改了描述 2年前

Furion v4.8.7.31 版本新增了非常方便修改作业触发器触发时间的方法

输入图片说明

百小僧 修改了描述 2年前
百小僧 修改了描述 2年前
百小僧 修改了描述 2年前
百小僧 修改了描述 2年前
百小僧 修改了描述 2年前
百小僧 修改了描述 2年前
百小僧 修改了描述 2年前
百小僧 修改了描述 2年前
百小僧 修改了描述 2年前
百小僧 修改了描述 2年前
百小僧 修改了描述 2年前
百小僧 修改了描述 2年前

自2023.02.22日 至现在,修复了不少 Bug

问题修复

输入图片说明

新特性

输入图片说明

其他

输入图片说明

百小僧 修改了描述 2年前
百小僧 修改了描述 2年前
百小僧 修改了描述 2年前

登录 后才可以发表评论

状态
负责人
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
参与者(4)
974299 monksoul 1578937227 风的传说-xue8sky 斑駁々記憶-guochen2 冬天-360528197
C#
1
https://gitee.com/dotnetchina/Furion.git
git@gitee.com:dotnetchina/Furion.git
dotnetchina
Furion
Furion

搜索帮助