开源库满足于个人,而完善于大众。

Natasha 自稳定版发布之后,众多老铁参与增强改进,感谢如下老铁的反馈:

1. 异常搜集

在 wenjq0911 建议下,添加了异常捕获,现 Natasha 的编译器已支持 Exception 字段,它将在整个编译周期中搜集异常。

        var fastBuilder = FastMethodOperator.New;fastBuilder.Complier.Exception;             //编译后异常会进入这里var fakeBuilder = FakeMethodOpeartor.New;fakeBuilder.Complier.Exception;var oopBuilder = new OopOperator();oopBuilder.Complier.Exception;if(Builder.Complier.Exception.ErrorFlag == ComplieError.None) {//编译成功!}   

UT地址:https://github.com/dotnetcore/Natasha/blob/master/test/NatashaUT/ExceptionTest.cs

2. Web环境

另外 wenjq0911 提供了 web 环境的运行信息,根据排查和调研,Natasha 现采用 AspNetCore 的 refs 子文件夹方式提供 web 应用程序的引用,配置文件内容已在 ReadMe 中更改。


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

3. 异步方法

在 Jello 的建议下,增加了异步方法的反解还原,并在 FastMethodOperator 中支持 UseAsync/AsyncFrom 等异步来源方法。


public static async void RunAsyncDelegate2()
{var delegateAction = FastMethodOperator.New.UseAsync().Param<string>("str1").Param<string>("str2").MethodBody(@"await Task.Delay(1000);string result = str1 +"" ""+ str2;Console.WriteLine(result);return result;".Return<Task<string>>().Complie();string result = await ((Func<string, string, Task<string>>)delegateAction)?.Invoke("Hello", "World1!");Assert.Equal("Hello World1!", result);}    

UT地址:https://github.com/dotnetcore/Natasha/blob/master/test/NatashaUT/AsyncMethoddTest.cs

4. 智能方法

Wayne 和 Dennis 在异步的基础上给出了体验优化的建议,Natasha 的Complier 函数目前支持方法参数及返回值的智能解析:

在不指定参数的情况下默认使用 TDelegate 的参数;

在不指定返回值的情况下,默认使用 TDelegate 的返回类型;

var delegateAction = FastMethodOperator.New.UseAsync().MethodBody(@"string result = arg1 +"" ""+ arg2;Console.WriteLine(result);return result;").Complie<Func<string, string, Task<string>>>();string result =await delegateAction?.Invoke("Hello", "World2!");Assert.Equal("Hello World2!", result);

UT地址:https://github.com/dotnetcore/Natasha/blob/master/test/NatashaUT/AsyncMethoddTest.cs

5. 外部文件与运行时脚本混合编译

在 Teng 的建议下,增加了外部文件和运行时脚本混合编译的功能。使用 LoadFile方法将外部 Dll 文件引入运行时,并添加到编译列表中。LoadFile 方法是在IComplier 抽象编译器中实现的,所以,只要 Builder 类实现了编译器,都将拥有此方法。


using System;namespace ClassLibrary1
{public class Class1{public void Show1(){Console.WriteLine("RunShow1");}public static void Show2(){Console.WriteLine("RunShow2");}}
}
string text = @"using System;using System.Text;using ClassLibrary1;namespace HelloWorld{public class Test{public override string ToString(){Class1 a = new Class1();a.Show1();Class1.Show2();return ""11"";}}}";//Class1 来自于 ClassLibrary1.dllOopComplier oop = new OopComplier(); //OopComplier在2.0中移除
oop.LoadFile(@"D:\Project\IlTest\ClassLibrary1\bin\Debug\netstandard2.0\ClassLibrary1.dll");
Type type = oop.GetClassType(text);//调用
var a = Activator.CreateInstance(type);
Console.WriteLine(a.ToString());

(2.0版本引擎升级后会将此方法包装进程序集域的操作类中)

6. 继承、重写与实现

allmyfantasy 建议下,完善了类、接口、抽象类、虚方法的实现。

ProxyOperator<Interface> builder = new ProxyOperator<Interface>();builder.OopName("InterfaceClass");builder["InterfaceMethod"] = "return 123456;";  // public methodbuilder.Compile();var test = builder.Create("InterfaceClass");ProxyOperator<Class> builder = new ProxyOperator<Class>();builder.OopName("TestClass");builder["NormalMethod"] = "return 123456;";     //new methodbuilder["VirtualMethod"] = "return 123456;";    //override methodbuilder.Compile();dynamic test = Activator.CreateInstance(builder.TargetType);ProxyOperator<Abstract> builder = new ProxyOperator<Abstract>();builder.OopName("AbstractClass");builder["AbstractMethod"] = "return 123456;";   //overrider methodbuilder.Compile();var test = builder.Create("AbstractClass");

UT地址:https://github.com/dotnetcore/Natasha/blob/master/test/NatashaUT/ProxyTest.cs

7. 添加包装类

guodf、Teng、WeihanLi 的建议下,添加包装类提升使用体验。

  var result = NewClass.Create(Action<OopOperator> action);var result = NewInterface.Create(Action<OopOperator> action);var result = NewStruct.Create(Action<OopOperator> action);var type = result.Type;var error = result.Exception; var result = NewMethod.Create(Action<FastMethodOperator> action);var error = result.Exception;var method = result.Method;method();

8. 支持非安全方法

根据 FUTURE* 的需求,支持了非安全方法的编译,现可以使用 UseUnsafe 方法来实现。

9. 快速实现动态功能

增加了 NFunc/NAction 两种快速实现委托的操作类。
//NFunc 和 NAction 支持的方法:
// 普通方法:Delegate
// 异步方法:AsyncDelegate
// 非安全方法:UnsafeDelegate
// 非安全异步方法:UnsafeAsyncDelegatevar action = NFunc<string, string, Task<string>>.UnsafeAsyncDelegate(@"string result = arg1 +"" ""+ arg2;Console.WriteLine(result);return result;");string result = await action("Hello", "World1!");
//result = "Hello World1!"

10. 枚举类型构建与编译


var script = new OopOperator().HiddenNameSpace().ChangeToEnum().OopAccess(AccessTypes.Public).OopName("EnumUT1").EnumField("Apple").EnumField("Orange",2).EnumField("Banana").Builder().Script;/* result:
public enum EnumUT1{Apple,Orange=2,Banana}*/

(2.0版本将在此基础上增加封装类)

11. 日志加深一级

\netcoreapp2.2\log\2019\08月19日\17时39分

(2.0版本将进行优化和改动)

鸣谢贡献者:

感谢 WeihanLi 帮忙做了 CodeReview 的工作。
感谢 Teng 帮忙做了 WikiReview 的工作。

Natasha2.0 将兼容 Core3.0 版本,除升级优化引擎之外还将支持隔离编译与卸载功能。后续还会跟随合理需求进行升级维护, 感谢各位的支持和鼓励。
欢迎访问主页并扫码进入 Natasha 生态群:https://github.com/dotnetcore/Natasha
孵化组正在进行的项目:DeepClone/NMapper/NCaller

转载于:https://www.cnblogs.com/NMSLanX/p/11438296.html

Natasha V1.3.6.0 的升级日志相关推荐

  1. 【C】Natasha V1.3.6.0 的升级日志

    文章转载授权级别:C            预计阅读时间:8分钟 开源库满足于个人,而完善于大众. Natasha 自稳定版发布之后,众多老铁参与增强改进,感谢如下老铁的反馈: 1. 异常搜集 在 w ...

  2. 讯飞输入法android版升级日志,讯飞输入法Android版7.0 实力解锁三大输入难题

    现代人的手机不是通讯工具而是一个伴侣,原本为了帮助我们更好的享受生活.提高效率,但现实情况手机却让我们变得低头不语.讯飞输入法一直致力于解放人们的双手和双眼,通过拼音输入到语音输入的小小改变,帮我们抬 ...

  3. 爱站seo工具包 v1.11.15.0

    点击下载来源:爱站seo工具包 v1.11.15.0 爱站seo工具包是一款网站数据查询应用,一个强大的站长工具集合,主要整合了爱站原有的各种功能.爱站seo工具包破解版拥有免费的SEO查询功能,包括 ...

  4. Redhat 5.4 Orcle RAC 数据库 从10.2.0.1升级到 10.2.0.4

    之前安装的是两个节点的RAC 平台. 数据库版本是10.2.0.1. 这个实验的目的就是将这个数据库版本从10.2.0.1 升级到 10.2.0.4.  升级包可以从Oracle metalink上进 ...

  5. mongoDB3.0.2 升级操作

    mongodb 升级到3.0.2 考虑到mongoDB 3.0推出不久,上个月还不想冒然进行升级,虽然性能说得很诱人. 现看到版本已到3.0.2,是到要升级的时候了. 开始在测试环境先做一个升级,没有 ...

  6. 64位Windows2003 Enterprise sp2 上64位Oracle10.2.0.1升级到Oracle10.2.0.3具体步骤

    64位Windows2003 Enterprise sp2 上64位Oracle10.2.0.1升级到Oracle10.2.0.3具体步骤 错误描述:64位的Oracle10.2.0.1版本在64位W ...

  7. oracle从9.2.0.1升级到9.2.0.8步骤

    背景:在windows 2003 server上安装了Oracle 9.2.0.1.0,现打算将其升级到9.2.0.8版本,并打上最新的安全补丁April 2008版. 1.升级oracle(admi ...

  8. EFR32MG21 zigbee 3.0 OTA 升级实验

    EFR32MG21 zigbee 3.0 OTA 升级实验 参考文档:AN728 https://www.sekorm.com/doc/1607600.html 芯片:EFR32MG21A010F76 ...

  9. oracle数据库9.2,Oracle数据库从 9.2.0.1 到 9.2.0.8升级步骤 for win

    1 打开远程桌面,登录到远程服务器的桌面 2 打补丁之前最重要的是数据库的备份,备份之前必须将数据库先干净的关闭,在服务管理中停掉所有的oracle相关服务. conn / as sysdba 如果报 ...

最新文章

  1. Spring Boot 和Apache Kafka的集成
  2. oracle 安装程序异常终止,Oracle安装错误“程序异常终止
  3. vue怎么使用eval_Webpack 构建工具手把手教你怎么用
  4. Appium adb 获取真实 appActivity
  5. 测试用例的书写方式及测试模板大全
  6. boost::mpl模块as_sequence的测试程序
  7. mysql主机咋填_mysql数据库主机填什么
  8. 取木棒21根c语言,关于m根火柴 ,人机最多取n根火柴(21根火柴进阶)
  9. Java ProcessBuilder environment()方法与示例
  10. map std 浮点数索引_C std :: map持有任何类型的值
  11. sql 在存储过程中使用事务(转)
  12. RabbitMQ消息接收的确认方式
  13. powerbi python词云图_Power BI 标签云可视化
  14. 【C语言】c语言基础知识梳理(超全)
  15. 特征向量的归一化方法
  16. 【英语小作文】-相关
  17. 炒股精髓:多位高手多年心血结晶(推荐)
  18. word2013表格文字上下居中
  19. 基于JAVASE的彩票摇号系统
  20. windows下更改应用程序属性的详细信息

热门文章

  1. SAP CRM BSP repository 如何判断switch的状态
  2. SAP CRM WebClient UI WebUI Runtime repository design
  3. 如何找到SAP ABAP odata服务实现的具体backend 系统
  4. 关于面向对象设计中类的方法是否应该使用boolean类型的参数
  5. Chrome开发者工具关于网络请求的一个隐藏技能 1
  6. oracle9i 查询scn,Oracle10g的current_scn是如何计算的?
  7. 平均正确率aps apm apl_如何通过信号词来提高雅思听力正确率?| 附写作批改
  8. mac securecrt程序无响应_终端仿真软件SecureCRT和Xshell,让运维工作更轻松
  9. linux c账户安全性,linux c flash安全策略
  10. datetime对应的java类型_MySQL数据类型笔记