Skip to content

使用roslyn方案打造高性能动态代码,包括动态构建,运行时编译,插件管理,域管理等功能。(Use Roslyn to create efficient dynamic code. Including dynamic build and so on.)

License

Notifications You must be signed in to change notification settings

xiaodelea/Natasha

 
 

Repository files navigation

中文 | English

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

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

Natasha

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

    基于roslyn的动态编译库,为您提供高效率、高性能、可追踪的动态构建方案,兼容stanadard2.0, 只需原生C#语法不用Emit。 让您的动态方法更加容易编写、跟踪、维护。 欢迎参与讨论:点击加入Gitter讨论组

展示

类库信息(Library Info)

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

Scan Name Status
Document wiki
Lang Complie
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

性能测试

  • 动态调用性能测试(对照组: emit, origin)
    字段性能测试
  • 动态初始化性能测试(对照组: emit, origin)
    初始化性能测试

Wiki审核

Teng(359768998@qq.com)


代码审核

WeihanLi


发布日志

  • 2019-12-05 : 发布v2.4.0.0, 移除并发计数,增加委托操作扩展 , 现 Fake/FastMethodOperator.Random 以及 RAction/RFunc 生成的委托都存入了缓存中,可以在委托上直接调用Delete进行卸载; 默认使用所有 Using 覆盖编译代码,当发生二义性引用时使用 CS0104Helper 处理二义性问题, 模板增加 UseCustomerUsing 方法来阻止 Using 覆盖,代价是将必要的 Using 引用精确引入到构建中。 编译引擎在出现二义性引用时将进行重试策略,重试次数1次。

  • 2019-12-06 : 发布v2.5.0.0, Operator 以及 N系列 API, 可以调用静态方法创建实例同时指定所属的域, 包括 Create(string) / Create(AssemblyDomain) / Random() 三种。

  • 2019-12-07 : 发布v2.5.4.0, 增加 CS0234 以及 CS0246 错误自动修复机制,命名空间在无效时会自动剔除并重编译,增加 CS0104 的替换逻辑,在未手动解决二义性时,默认使用靠前的命名空间, 由 NDomain 创建的独立/随机域类型/结构/枚举/接口将支持回收。

  • 2019-12-10 : 发布v2.6.1.0, 移除NFunc / RFunc / NAction / RAction / NDelegateOperator / RDelegateOperator / 字符串扩展方法 / 委托扩展方法;改 Delete 卸载方法为 DisposeDomain ,改 AddInCache 为内部方法不对外开放;三个静态创建实例的方法(Create(string) / Create(AssemblyDomain) / Random())增加第二个参数,指定是否以文件方式进行编译,默认为 false,增加静态属性 Default 作为系统域即 Create()方法返回实例。

  • 2019-12-16 : 发布v2.7.0.1, 分离项目,Natasha.Core 项目负责原始编译的 API 以及域操作,Natasha.Reverser 项目负责运行时信息反解操作,Natasha 项目引用了 Natasha.Core 以及 Natasha.Reverser 并组建了 Template / Builder / Operator 动态构建三件套,提供便利的 API 以便对外使用。

  • 2019-12-17 : 发布v2.7.3.0, Natasha 非系统域生成的操作均进行了缓存,以便进行引用移除/域卸载等操作, Type / Delegate / Assembly 均可以使用 RemoveReferences / DisposeDomain 方法进行引用移除或者卸载域操作。

  • 2019-12-18 : 发布v2.7.6.0, Natasha 方法操作类增加 Override 和 NewHidden 方法, NAssembly 增加三种域创建方式, 移除代理操作类到 NCaller 项目中。


升级日志


生态微信群

为防止广告骚扰,微信群已关闭,进群请发送您的微信号到 2765968624@qq.com 并说明进群原因。



使用方法(User Api):


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


首先编辑您的工程文件:

  <PropertyGroup>
  
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp2.2</TargetFramework>
    
    //一定要加上这句话
    <PreserveCompilationContext>true</PreserveCompilationContext>
    
    //WEB发布要加
    <MvcRazorExcludeRefAssembliesFromPublish>false</MvcRazorExcludeRefAssembliesFromPublish>
    
  </PropertyGroup>
 


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

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




License

FOSSA Status

依赖(Dependence)

  • Microsoft.CodeAnalysis.CSharp.Workspaces Version=3.4.0
  • Microsoft.Extensions.DependencyModel Version=3.1.0
  • Microsoft.Net.Compilers Version=3.4.0
  • Microsoft.Net.Compilers.Toolset Version=3.4.0

About

使用roslyn方案打造高性能动态代码,包括动态构建,运行时编译,插件管理,域管理等功能。(Use Roslyn to create efficient dynamic code. Including dynamic build and so on.)

Resources

License

Code of conduct

Stars

Watchers

Forks

Packages

No packages published

Languages

  • C# 100.0%