随笔分类 - C#
摘要:NatashaInitializer.Preheating 预热方法 首次使用Natasha时都需要进行初始化操作,其中该方法还可以加入一个回调函数作为参数,该回调函数主要作用为减少程序集引用文件的加载,可以有效的控制内存涨幅 通过判断Preheating方法中回调函数的第二个参数,可以有选择性的加
阅读全文
摘要:Natasha的构成 Natasha官网给出的例子中(例子),用了两种方式去完成了同一件事情 这两种方式也是Natasha脚本构建器的重要组成部分,Complier编译器和Template模板。 Complier编译器 白话就是自己写一个cs代码,然后由Natasha动态编译 AssemblyCSh
阅读全文
摘要:什么是Natasha Natasha是基于Roslyn 的动态程序构架库,说的直白一点就是将一个或多个cs文件进行动态编译并放入到正在运行的程序中去。例如我们有一个设备库,设备库中的设备会不定期的更新,那我们只需要将平台(展示和调用)完成,每次添加的时候使用Natasha生成设备类别和设备的调用代码
阅读全文
摘要:C#新特性 泛型属性 创建属性时可直接使用泛型 // 声明一个泛型属性 public class GenericAttribute<T>:Attribute{} // 使用 [GenericAttribute<string>()] public string Method()=> default;
阅读全文
摘要:为什么要从基础看起 从.net framework3.5就开始接触c#,到现在.net7的崛起,期间有大量的新技术和框架冲击着我,MVC1.0的时候放弃过,感觉无所适从,linq也是近几年才开始使用,感觉现在写代码的方式已经被时代所淘汰,因此萌生出了从头捋顺一次。 学习的时候并没有通过一个完整的体系
阅读全文
摘要:诊断的含义 通过自己的逻辑代码判断动态编译的代码是否有问题,有问题时需要告诉编译器有警告或者错误,让编译器返回来向我们展示我们期望的诊断信息。 因为动态编译时编译器无法得知我们写入是否有问题,从而产生很多奇奇怪怪的错误提示。 使用场景 当代码写好了,准备编译生成时,我们无法判断动态生成的代码是否存在
阅读全文
摘要:我们经常会遇到,原有代码中新增方法,扩展我们自己写的代码。这个使用Source Generator也可以实现 在上一章的接触上新增类库(AugmentingGeneratorMethod) 添加Microsoft.CodeAnalysis.Analyzers 和 Microsoft.CodeAnal
阅读全文
摘要:上一篇讲解了如何直接调用静态方法,而有时候我们会生成cs文件或其他格式的文件,进而使用Source Generator编译。本例中就对资源文件进行编译进行举例说明。 在Source Generator调用的基础上,创建一个新的类库项目(SourceGeneratorXmlMethod) 在项目上添加
阅读全文
摘要:创建一个控制台项目(SourceGeneratorConsole) 切记不要使用顶级语句 创建一个类库项目(SourceGeneratorStaticMethod),选择netstandard2.0平台 在类库项目中引用Microsoft.CodeAnalysis.CSharp(4.4.0)和Mic
阅读全文
摘要:Source Generator 什么是Source Generator .NET 5引入的系特性,可在应用编译期间根据当前编译信息动态生成代码,也可以直接引用动态生成的代码。 优势 加快运行速度 原有的程序机制是初次运行时通过反射进行依赖注入,这时会导致第一次运行加载大量数据,运行会慢,再一个不利
阅读全文
摘要:.NET MAUI是什么 微软通过收购Xamarin后将其融于到了.Net MAUI中,最大的优点就是一套代码可以多平台共享,个人理解,展示样式(前端展示部分)是Xamarin.Forms的改进版,中间部分是接口层,用于统一接口,再往下就是每个系统相对对立的部分,例如非Windows环境是由Mono
阅读全文
摘要:Quartz.Examples.AspNetCore .NetCore的Web系统,后台主要执行多个触发器任务,前台展示所有触发器信息和正在执行的作业的相关信息,还可以通过访问health-UI来查看目前系统健康状态 launchSettings.json { "profiles": { "Qu
阅读全文
摘要:Quartz.Examples 反射-Example批量执行 实现思路:定义一个统一的接口,需要实现的类全部实现该接口;通过反射获取实现该接口的实例并触发其中的方法。 定义统一的接口 // 所有要实现类都要有Run方法 public interface IExample { Task Run()
阅读全文
摘要:最佳实践 JobDataMap 建议只存储基本数据(含String),避免序列化问题 作业执行期间,JobDetail和Trgger的底层共用一个JobDataMap 实例,因此Trigger的数据会覆盖Job中相同key的值。 每个独立触发器的JobDataMap 是独立的 在作业执行期间,建议使
阅读全文
摘要:Schedule 相关属性设置 扩展属性方式 var host = Host.CreateDefaultBuilder() .ConfigureServices(services => { services.AddQuartz(opt => { // 主键 opt.SchedulerId = "";
阅读全文
摘要:Listener 调度任务的监听,当前版本支持添加调度,触发器和任务的监听,其中触发器和任务的监听支持通过监听名称进行添加(Add*ListenerMatcher方法) 监听不能对外抛出异常,需要内部处理,类似于切面,监听的返回结果不会影响程序主体 Job Listener IJobListener
阅读全文
摘要:根据官网说明 | 类型 | 概述 | | | | | IScheduler | 调度类核心接口 | | IJob | 独立实现业务逻辑需要继承的任务接口 | | IJobDetail | 给任务接口定义实例的任务说明类接口 | | ITrigger | 触发器,设置何时出发,周期触发等 | | Jo
阅读全文
摘要:官网地址 https://www.quartz-scheduler.net/ 使用说明 dll引用 使用NuGet 搜索Quartz,作者为Marko Lahma, Quartz.NET为该插件 目前最新的为3.5.0版本,.NET Core/netstandard 2.0 and .NET Fra
阅读全文
摘要:FluentScheduler 代码布局 代码布局相对简单,没有cron,不建议使用JobFactory 源码布局如下 | 第一级 | 第二级 | 说明 | | | | | | Enum(文件夹) | | 枚举 | | | TimeOfDayRunnable.cs | 判断任务执行状态的枚举 | |
阅读全文
摘要:定时调度插件 FluentScheduler 源码地址 官网文档地址 使用说明 dll引用 文章使用的版本为5.5.1版本 使用GuGet搜索FluentScheduler即可找到 如果框架为.NET Framework4.5+,.NET Core 1.0+或.NET5.0+,可使用5.5.1最新版
阅读全文