Skip to content

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

License

x-strong/Natasha

 
 

Repository files navigation

中文 | English

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

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

Natasha

Member project of .NET Core Community NuGet Badge Gitter Badge GitHub license

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

展示

类库信息(Library Info)

GitHub tag (latest SemVer) GitHub repo size GitHub commit activity Codecov

Scan Name Status
Document wiki
Lang Compile
OS Windows linux mac
Rumtime standard standard standard

持续构建(CI Build Status)

CI Platform Build Server Master Build Master Test
Github linux/mac/windows Build status
Azure Windows Build Status Build Status
Azure Linux Build Status Build Status
Azure Mac Build Status Build Status

使用方法(User Api):

v3.10.0.0 版本之前

  • 引入 动态构建库: DotNetCore.Natasha

  • 引入 编译环境库: DotNetCore.Compile.Environment

  • 向引擎中注入定制的域: DomainManagement.RegisterDefault< AssemblyDomain >();

  • 敲代码


v3.10.0.0 版本:

  • 引入 动态构建库: DotNetCore.Natasha

  • 引入 编译环境库: DotNetCore.Compile.Environment

  • 向引擎中注入定制的域: AssemblyDomain.Init();

  • 敲代码


v3.10.0.0 版本以后

  • 引入 动态构建库: DotNetCore.Natasha

  • 向引擎中注入定制的域: AssemblyDomain.Init();

  • 敲代码


  • 配置文件:
   //如果你觉得发布文件夹下关于本地化的文件夹太多,您可以选择如下节点
   //选项:cs / de / es / fr / it / ja / ko / pl / ru / tr / zh-Hans / zh-Hant
   <SatelliteResourceLanguages>en</SatelliteResourceLanguages>

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


发布日志

  • 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 程序集名。精简引擎部分冗余代码。

  • 2020-07-02 : 发布v3.14.0.0,部分操作类提升到全局引用,AssemblyDomain \ DomainManagement \ AssemblyCSharpBuilder; 使用可继承的编译环境包;使用可继承的调试环境包。 AssemblyCSharpBuilder 引擎继续调整 API 结构,提升部分选项属性的暴露层级;引擎规避一些常见的编译警告;模板增加泛型约束模板,反解器增加泛型约束反解功能;修复部分模板状态机操作;增加CS0012错误重定向。


开发计划

分支 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


性能测试

  • 动态调用性能测试(对照组: emit, origin)
    字段性能测试
  • 动态初始化性能测试(对照组: emit, origin)
    初始化性能测试
  • 内存及CPU监测截图
    内存及CPU

Wiki审核

Teng(359768998@qq.com)


代码审核

WeihanLi


升级日志


生态微信群

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


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

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

查找树算法: 【BTFindTreee】

快速动态缓存: 【DynamicCache】




License

FOSSA Status

About

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

Resources

License

Code of conduct

Stars

Watchers

Forks

Packages

No packages published

Languages

  • C# 98.2%
  • HTML 1.8%