基于 Roslyn 的 C# 动态程序集构建库

网友投稿 1055 2022-10-21

基于 Roslyn 的 C# 动态程序集构建库

基于 Roslyn 的 C# 动态程序集构建库

中文 | English

你们的反馈是我的动力,文档还有很多不足之处;

当你看完文档之后仍然不知道如何实现你的需求,您可以查看 FAQ 或者在issue中提出你的需求。

v3.10.0.0 版本慎用,详情见 NCC 公众号文章。

Natasha

基于 Roslyn 的 C# 动态程序集构建库,该库允许开发者在运行时使用 C# 代码构建域 / 程序集 / 类 / 结构体 / 枚举 / 接口 / 方法等,使得程序在运行的时候可以增加新的模块及功能。Natasha 集成了域管理/插件管理,可以实现域隔离,域卸载,热拔插等功能。 该库遵循完整的编译流程,提供完整的错误提示, 可自动添加引用,完善的数据结构构建模板让开发者只专注于程序集脚本的编写,兼容 stanadard2.0 / netcoreapp3.0+, 跨平台,统一、简便的链式 API。 且我们会尽快修复您的问题及回复您的 issue. 更多的动图展示

类库信息(Library Info)

持续构建(CI Build Status)

使用方法(User Api):

引入 动态构建库: DotNetCore.Natasha 引入 编译环境库: DotNetCore.Compile.Environment 向引擎中注入定制的域: 3.10.0.0 版本以前: DomainManagement.RegisterDefault< AssemblyDomain >(); 3.10.0.0 版本及以后: AssemblyDomain.Init(); 敲代码

更多更新的参考文档:https://natasha.dotnetcore.xyz/

发布日志

2020-05-01 : 发布v3.0.0.0, 重构所有模块,上层API几乎没变,底层可以继承重写,移除部分 API。 2020-05-06 : 发布v3.0.2.0, 修复 修饰符模板状态机BUG, 增加 语法树选项 ForceAddSyntax 不管对错强制添加语法树。 2020-05-12 : 发布v3.2.0.0,增加插件自动装载 using 的功能,修复部分字段命名,Domain 部分抽象实现将在 AssemblyDomain 中实现,增加 GetPluginAssembies 抽象方法以返回插件带来的程序集,需要子类实现。 2020-06-01 : 发布v3.4.0.0,Oop 模板增加两种内容构造API , nclass.GetXXXBuilder 返回构造器,用户可以在外随意定制, nclass.Property/Field/Method/Ctor( builder) 支持直接传一个完好的 builder 进去。 2020-06-06 : 发布v3.8.0.0,修复模板状态机操作; 模板中API调整:DefinedName -> Name, DefinedType -> Type; 调整引擎 API 结构,减少 AssemblyCSharpBuilder 类 API 操作的层级;增加对私有字段动态调用的支持,OOP 模板新增API AllowPrivate; 由于精力有限周边项目将只对 R2D \ DynamicaCache 进行更新。 2020-06-07 : 发布v3.10.0.0,分离 SDK / SHARE 运行时库引用,以便支持系统类库的私有字段。调整初始化 API DomainManagement.RegiestDefault => AssemblyDomain.Init();; 引擎继续调整 API 结构,提升部分属性的暴露层级: AllowUnsafe 属性以支持非安全代码编译;OutputToFile 切换内存及文件编译模式;UseRelease 是否使用优化编译;OutputKind 编译类型的枚举,包括 dll / exe 等; Domain 域设置; AssemblyName 程序集名。精简引擎部分冗余代码。

开发计划

分支 NoPublish

分离 share 库,并作为域操作的一个选项 使用委托或Emit优化部分反射操作 增加并发库/常见内置类型的 share 引用测试 编译异常信息作为 Message 直接展示 调研编译环境继承的解决方案 发布针对 Roslyn 可继承成的编译环境包 增加泛型约束模板 生存下来,挣钱 反解器增加泛型类型约束反解 增加反解枚举,增强模板构造的状态机 重新检查反解器是否违反了单一职责(D2R) 改造 R2D 持续性能优化 评估模板职责 评估扩展方向 评估 NCaller 项目新需求的抽象 改造 DynmaicCache 持续优化性能 优化静态自动机 BTF 算法 每周定时跑算法随机测试程序 持续评估 span 序列比较方法 及 指针转换比较 的性能 评估 Trie 及变种 与 BTF 算法的性能差距 元数据 优化性能 精确解析 持续评估封装架构的设计方案 改造 NCaller 持续优化性能 私有支持 设计动态变现功能和实现 设计只读功能维度和实现 评估 NCaller 代理方式 和 DynmaicCache 代理方式 在 R2D 模板下的异同及抽象 优化静态自动机代码 依赖还原库 NET 模块 NUGET 模块 FOLDER SCAN 模块 跨平台 模块 定制语法/语法糖 to Natasha 持续评估 Natasha 在灵活授权模型上的应用 持续搜集反编译的需求 调研 JAVA to C# 调研 GO to C# 考虑要不要调研 PHP to C# 谁能来帮我一起搞,帮我点上左边的小对号?

欢迎大家提交PR

性能测试

Wiki审核

Teng(359768998@qq.com)

代码审核

WeihanLi

升级日志

[2019][2020]

生态微信群

为防止广告骚扰,微信群已关闭,进群请发送您的微信号到 2765968624@qq.com 并说明进群原因。 如果未及时处理,请在 issue 中提醒我,QQ我平时不上了。 (发广告的先死个妈)

Natasha的动态调用模块: 已移至【NCaller】

Natasha的动态克隆模块: 已移至【DeepClone】

查找树算法: 【BTFindTreee】

快速动态缓存: 【DynamicCache】

License

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:构建并运行go程序的单个实例
下一篇:【详细教程】Kafka应用场景、基础组件、架构探索
相关文章

 发表评论

暂时没有评论,来抢沙发吧~