动态代码框架发布-CZGL.Roslyn
CZGL.Roslyn
开源项目位置:https://github.com/whuanle/CZGL.CodeAnalysis
基于 Roslyn 技术的 C# 动态代码构建器以及编译器,开发者可以使用此库动态构建 C# 代码,并且通过指定条件编译代码。
- 运行时动态构造代码;
- 运行时为程序提供新的模块功能,拓展能力;
- 设计函数平台,以代码片段为单位执行;
- 语法分析提示,编译错误语法警告,精确到代码行;
- 完善的代码标准,避免动态代码语法错误;
- 简洁、简单的 API,完整的 Test 测试;
- ... ...
动图演示
这里使用 Blazor 测试演示,代码可以在源码的 examples/BlazorExample 中找到。

Blazor 演示的是以命名空间为单位的编译,你可以通过定制后台,实现只需要代码块即可运行,连函数头都不需要。更多功能等你来挖掘!
丰富的文档与示例
CZGL.Roslyn 拥有丰富的文档说明和 API 接口说明,让你使用起来得心应手!
文档 URL:https://1586052146.gitbook.io/codeanalysis
API URL:https://czgl-roslyn.github.io/czgl-roslyn


版本更新计划
0.1.0 α版(正在开发中,当前版本)
特性:一个具有完整功能的初级版本。
0.2.0 β(beta)版
特性:消除了严重的错误和缺陷,完成大量的单元测试等,对代码的可靠性有了极大的提升;能够上线 Nuget 提供用户试用;对用户的需求进行收集,改进程序;
0.3.0 γ版
该版本已经相当成熟了,根据用户使用 β 版本后的建议和需求进行更新;开始关注性能,进行性能测试已经采取措施对性能进行改进。
可以做什么
最大的特点就是动态代码构造以及动态编译,因此我们可以分为两部分讨论。
动态代码生成
数据库表还原实体,自动生成类模型文件;(EFCore 有这功能)
公司内部定义工具集,通过确定的模板,一键生成代码!
通过已确定的逻辑功能,快速生成代码导出!
编写 AOP 框架,实现动态代理;
代码语法检查;
生成计划代码,后台管理哪部分代码可执行;
工作流程序通过代码生成一次性构建完毕,工作流程直接写到程序集中,提高性能!
快速从表格等各种数据来源,生成代码;
自定义 UI 生成器,通过拖拉控件生成代码;
... ...
动态编译
自研云函数平台,用户上传代码即可直接执行;
公司后台计划任务,以程序集为单位,自定义计划执行程序集;
编写 AOP 框架,动态编译程序集;
单文件(.cs)编译,不需要 SDK、IDE!脱离开发环境编译!
... ...
与 Natasha 的关系
Natsha 是一个非常优秀的动态代码框架,由大帅主导,形成了功能完整、性能强悍,并且兼容 .NET FX 4.6~.NET Core ↑ ,通过了大量性能测试以及高性能代码优化。
可以以强到不得了来形容。仓库地址:https://github.com/dotnetcore/Natasha
那为什么 还要写 CZGL.Rolysn 呢?
1,锻炼技术能力;
2,与 Natasha 不构成竞品, CZGL.Roslyn 尽可能做的轻量,开发者可以考虑业务大小,大型场景使用 Natasha;快速建设使用 CZGL.Roslyn;Natasha 学习曲线比较大,CZGL.Roslyn 学习上手比较快。
3,Natasha 功能完整,依赖比较多;CZGL.Roslyn 功能尽可能足够同时保存少量的依赖,体积小;
4,CZGL.Roslyn 适合写小工具,例如 dotnet-tool、数据库还原实体、为 ML.NET 提供快速代码生成等,适合作为小部件为你的程序提供额外的功能;Natasha 适合作为独立的一个产品去做,围绕 Natasha 构建更多功能;
论性能,Natasha 优秀;论功能完整性,Natasha 一整套大保健服务... ...
CZGL.Roslyn 相比 Natasha ,大概就只有 “轻量” 这个特点了,简直被秒杀。。。
我可以从这个框架学习到什么
框架特点是简单易用,你可以从中学习到大量的反射知识,以及 Roslyn 知识,甚至可能学习到 EMIT(后面我会使用这种技术优化性能)。
例如,如何通过取得特性中的属性值?
[Display(Name = "_Id")]
public int Id {get;set;}
一个 Type ,如何确定他是类、结构体、委托?
如果你查阅资料会发现,Type.IsClass 可以识别出类、委托;
以下代码为什么 JAVA 和 C# 执行结果不同?
public class A
{
public void Test
{
Console.WriteLine("A");
}
}
public class B:A
{
// 隐藏父类 Test 函数
public new void Test
{
Console.WriteLine("B");
}
}
A a = new B();
a.Test();
目前 CZGL.Roslyn 处于初版,代码还处于非常简单的状态,逻辑也很简单,因此,如果你有意学习 C# 中的反射、动态代码技术等,想了解源代码在生成后如何通过反射获得信息、源代码会被如何编译等,CZGL.Roslyn 就是你最佳的选择。
动态代码框架发布-CZGL.Roslyn的更多相关文章
- Android 热补丁动态修复框架小结
一.概述 最新github上开源了很多热补丁动态修复框架,大致有: https://github.com/dodola/HotFix https://github.com/jasonross/Nuwa ...
- android动画源码合集、动态主题框架、社交app源码等
Android精选源码 仿MIUI果冻视图-BouncingJellyView 一个快速易用的动态主题框架 android动画效果集合源码 android使用Kotlin开发的Dribbb ...
- Android 使用动态载入框架DL进行插件化开发
如有转载,请声明出处: 时之沙: http://blog.csdn.net/t12x3456 (来自时之沙的csdn博客) 概述: 随着应用的不断迭代.应用的体积不断增大,项目越来越臃肿,冗余添 ...
- Web服务cxf框架发布2
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本人声明.否则将追究法律责任. 作者:永恒の_☆ 地址:http://blog.csdn.net/chenghui0317/ ...
- 深入浅出etcd系列Part 1 – etcd架构和代码框架
1.绪论 etcd作为华为云PaaS的核心部件,实现了PaaS大多数组件的数据持久化.集群选举.状态同步等功能.如此重要的一个部件,我们只有深入地理解其架构设计和内部工作机制,才能更好地学习华为云Ku ...
- C# 使用Emit实现动态AOP框架 进阶篇之异常处理
目 录 C# 使用Emit实现动态AOP框架 (一) C# 使用Emit实现动态AOP框架 (二) C# 使用Emit实现动态AOP框架 (三) C# 使用Emit实现动态AOP框架 进阶篇之异常处 ...
- C# 使用Emit实现动态AOP框架 进阶篇之优化
目 录 C# 使用Emit实现动态AOP框架 (一) C# 使用Emit实现动态AOP框架 (二) C# 使用Emit实现动态AOP框架 (三) C# 使用Emit实现动态AOP框架 进阶篇之异常处 ...
- Spring Boot下的一种导出CSV文件的代码框架
1.前言 CSV,逗号分隔值(Comma-Separated Values),即为逗号分隔的文本文件.如果值中含有逗号.换行符.制表符(Tab).单引号及双引号,则需要用双引号括起来:如果值中包含 ...
- Spring Boot下的一种导出Excel文件的代码框架
1.前言 在Spring Boot项目中,将数据导出成Excel格式文件是常见的功能.与Excel文件导入类似,此处也用代码框架式的方式实现Excel文件导出,使得代码具有可重用性,并保持导出数据 ...
- x01.CodeBuilder: 生成代码框架
根据 Assembly 生成代码框架. 这是学习 AvalonEdit 的一个副产品.学习时,照着源代码新建文件夹,新建文件,添加方法与属性,虽然只是个框架,也要花费大量时间.为什么不让它自动生成呢? ...
随机推荐
- 从好玩到好用:程序员用AI提效的那些事儿
本片内容是[AI思维空间]ChatGPT纵横编程世界,点亮智慧火花的续作,主要记录组内开发小伙伴儿们在开发过程中的实际应用案例,记录典型案例,尽量不要和其他人重复,以解决开发过程中的实际问题为主,设计 ...
- 【如何提高IT运维效率】深度解读京东云基于NLP的运维日志异常检测AIOps落地实践
作者:京东科技 张宪波.张静.李东江 基于NLP技术对运维日志聚类,从日志角度快速发现线上业务问题 日志在IT行业中被广泛使用,日志的异常检测对于识别系统的运行状态至关重要.解决这一问题的传统方法需 ...
- dump分析器winbdg
工具: winbdg WinDBG不是专门用于调试.Net程序的工具,它更偏向于底层,可用于内核和驱动调试.进行普通的.Net程序调试还是使用微软专为.Net开发的调试工具MDBG更方便一些.但是Wi ...
- 基于go-restful实现的PoW算力池模型
最开始知道区块链是在17年初,当时因为项目压力不大,开始研究比特币源码.对于比特币中提到的Proof of Work,当时只是一眼带过,并没有详细查看过相关的代码.在最近的项目中,考虑到性能的要求,需 ...
- Go语言的100个错误使用场景(一)|代码和项目组织
目录 前言 1. Go: Simple to learn but hard to master 1.1 Go 语言概述 1.2 简单不等于容易 1.3 使用 Go 的100个错误 2. Code an ...
- 【八】强化学习之DDPG---PaddlePaddlle【PARL】框架{飞桨}
相关文章: [一]飞桨paddle[GPU.CPU]安装以及环境配置+python入门教学 [二]-Parl基础命令 [三]-Notebook.&pdb.ipdb 调试 [四]-强化学习入门简 ...
- 有用的sql笔记(工作总结)
1.查询当前月(数字为0表示当前月份,1表示上个月,-1表示下个月,以此类推) SELECT DATE_FORMAT((CURDATE() - INTERVAL [数字] MONTH), '%Y-%m ...
- Redis中的key的生存时间和过期时间
目录 1.说明 2.指令 2.1.删除和更新 3.过期时间的保存 4.计算剩余生存时间 5.过期键的删除策略 5.1.定时删除 5.2.惰性删除 5.3.定期删除 1.说明 生存时间: (Time T ...
- 为Win12做准备?微软Win11 23H2将集成AI助手:GPT4免费用
微软日前确认今年4季度推出Win11 23H2,这是Win11第二个年度更新. Win11 23H2具体有哪些功能升级,现在还不好说,但它会集成微软的Copilot,它很容易让人想到多年前的" ...
- Java并发(二十三)----同步模式之保护性暂停
1.定义 即 Guarded Suspension,用在一个线程等待另一个线程的执行结果 要点 有一个结果需要从一个线程传递到另一个线程,让他们关联同一个 GuardedObject 如果有结果不断从 ...