动态代码框架发布-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 的一个副产品.学习时,照着源代码新建文件夹,新建文件,添加方法与属性,虽然只是个框架,也要花费大量时间.为什么不让它自动生成呢? ... 
随机推荐
- CS231N Assignment1 SVM 笔记
			svm.ipynb 为SVM实现一个完全矢量化的损失函数 为其解析梯度实现完全矢量化表达式 使用数值梯度检查实现结果 使用验证集调整学习率和正则化 使用 SGD 优化损失函数 可视化最终学习权重 第一 ... 
- 【K哥爬虫普法】网盘用的好,“艳照门”跑不了
			我国目前并未出台专门针对网络爬虫技术的法律规范,但在司法实践中,相关判决已屡见不鲜,K哥特设了"K哥爬虫普法"专栏,本栏目通过对真实案例的分析,旨在提高广大爬虫工程师的法律意识,知 ... 
- 如何在centos7中完全卸载Python3
			如何在centos7中完全卸载Python3?根据查到的资料,主要就是卸载,然后删除一些软连接删除干净,逻辑很简单,贴一些具体的操作代码,记录下来 . 卸载Python3的步骤 #卸载python3 ... 
- 缩小ios的包体
			不选全部兼容设备 在xcode中导出ipa时,不勾选导出全部兼容性设备,这样导出的ipa包含两种架构:armv7和64 打包压缩 unity提供三种压缩模式可以选择,默认选择的是:default不压缩 ... 
- Docker 安装 MySQL8 数据库
			创建数据卷 mkdir -p /usr/mysql/conf /usr/mysql/data chmod -R 755 /usr/mysql/ 创建配置文件 vim /usr/mysql/conf/m ... 
- C/C++ 反汇编:分析类的实现原理
			反汇编即把目标二进制机器码转为汇编代码的过程,该技术常用于软件破解.外挂技术.病毒分析.逆向工程.软件汉化等领域,学习和理解反汇编对软件调试.系统漏洞挖掘.内核原理及理解高级语言代码都有相当大的帮助, ... 
- SpringCloud-06-Consul注册中心
			Consul Server Consul 是由 HashiCorp 基于 Go 语言开发的,支持多数据中心,分布式高可用的服务发布和注册服务软件. 用于实现分布式系统的服务发现与配置. 使用起来也较 ... 
- json扩展之自定义序列化方式
			简介:由于json.dumps() 只能序列化Python基本数据类型,如果我们想要在数据中掺杂时间对象,或者自定义类的对象则会造成序列化数据的失败,因此json.dumps() 提供了一个属性 cl ... 
- MangoDB相关文档阅读小结
			以往直到现在我所负责的业务场景没有使用MangoDB的,不过对于NoSQL的流行以及兴趣,阅读了一些文档做了简单的了解.待后续需要使用时再深入研究. 本文不介绍具体的语法. 基本信息 类似Json的B ... 
- STM32 HAL库 USART DMA驱动
			前言 本文是在使用 STM32L4 的串口 DMA 功能时,使用 HAL 库出现的一些问题,通过以下方式解决了 HAL 库中存在 DMA 发送和接收的一些问题. STM32L4 的 DMA 简介 DM ... 
