做母婴产品的网站,建材网络销售平台有哪些,西安未央区网站建设,界面网站建设文章转载授权级别#xff1a;C 预计阅读时间#xff1a;8分钟开源库满足于个人#xff0c;而完善于大众。Natasha 自稳定版发布之后#xff0c;众多老铁参与增强改进#xff0c;感谢如下老铁的反馈#xff1a;1. 异常搜集在 wenjq0911 建议下#xff0c;添加… 文章转载授权级别C 预计阅读时间8分钟开源库满足于个人而完善于大众。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.cs2. Web环境另外 wenjq0911 提供了 web 环境的运行信息根据排查和调研Natasha 现采用 AspNetCore 的 refs 子文件夹方式提供 web 应用程序的引用配置文件内容已在 ReadMe 中更改。lt;PropertyGroupgt; lt;OutputTypegt;Exelt;/OutputTypegt; lt;TargetFrameworkgt;netcoreapp2.2lt;/TargetFrameworkgt; // 一定要加上这句话 lt;PreserveCompilationContextgt;truelt;/PreserveCompilationContextgt; // WEB发布加 lt;MvcRazorExcludeRefAssembliesFromPublishgt;falselt;/MvcRazorExcludeRefAssembliesFromPublishgt;
lt;/PropertyGroupgt;3. 异步方法在 Jello 的建议下增加了异步方法的反解还原并在 FastMethodOperator 中支持 UseAsync/AsyncFrom 等异步来源方法。public static async void RunAsyncDelegate2()
{ var delegateAction FastMethodOperator.New .UseAsync() .Paramlt;stringgt;(str1) .Paramlt;stringgt;(str2) .MethodBody( await Task.Delay(1000); string result str1 str2; Console.WriteLine(result); return result; .Returnlt;Tasklt;stringgt;gt;() .Complie(); string result await ((Funclt;string, string, Tasklt;stringgt;gt;)delegateAction)?.Invoke(Hello, World1!); Assert.Equal(Hello World1!, result); } UT地址https://github.com/dotnetcore/Natasha/blob/master/test/NatashaUT/AsyncMethoddTest.cs4. 智能方法Wayne 和 Dennis 在异步的基础上给出了体验优化的建议Natasha 的ComplierTDelegate 函数目前支持方法参数及返回值的智能解析:在不指定参数的情况下默认使用 TDelegate 的参数;在不指定返回值的情况下默认使用 TDelegate 的返回类型; var delegateAction FastMethodOperator.New .UseAsync() .MethodBody( string result arg1 arg2; Console.WriteLine(result); return result;) .Complielt;Funclt;string, string, Tasklt;stringgt;gt;gt;(); string result await delegateAction?.Invoke(Hello, World2!); Assert.Equal(Hello World2!, result); UT地址https://github.com/dotnetcore/Natasha/blob/master/test/NatashaUT/AsyncMethoddTest.cs5. 外部文件与运行时脚本混合编译在 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.dll OopComplier 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 建议下完善了类、接口、抽象类、虚方法的实现。 ProxyOperatorlt;Interfacegt; builder new ProxyOperatorlt;Interfacegt;(); builder.OopName(InterfaceClass); builder[InterfaceMethod] return 123456;; // public method builder.Compile(); var test builder.Create(InterfaceClass); ProxyOperatorlt;Classgt; builder new ProxyOperatorlt;Classgt;(); builder.OopName(TestClass); builder[NormalMethod] return 123456;; //new method builder[VirtualMethod] return 123456;; //override method builder.Compile(); dynamic test Activator.CreateInstance(builder.TargetType); ProxyOperatorlt;Abstractgt; builder new ProxyOperatorlt;Abstractgt;(); builder.OopName(AbstractClass); builder[AbstractMethod] return 123456;; //overrider method builder.Compile(); var test builder.Create(AbstractClass);UT地址https://github.com/dotnetcore/Natasha/blob/master/test/NatashaUT/ProxyTest.cs7. 添加包装类guodf、Teng、WeihanLi 的建议下添加包装类提升使用体验。 var result NewClass.Create(Actionlt;OopOperatorgt; action); var result NewInterface.Create(Actionlt;OopOperatorgt; action); var result NewStruct.Create(Actionlt;OopOperatorgt; action); var type result.Type; var error result.Exception; var result NewMethod.Create(Actionlt;FastMethodOperatorgt; action); var error result.Exception; var method result.Method; method(); 8. 支持非安全方法根据 FUTURE* 的需求支持了非安全方法的编译现可以使用 UseUnsafe 方法来实现。9. 快速实现动态功能增加了 NFunc/NAction 两种快速实现委托的操作类。//NFunc 和 NAction 支持的方法
// 普通方法Delegate
// 异步方法AsyncDelegate
// 非安全方法UnsafeDelegate
// 非安全异步方法UnsafeAsyncDelegate var action NFunclt;string, string, Tasklt;stringgt;gt;.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, Orange2, 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/NCallerhttps://github.com/dotnetcore打赏一杯酒削减三分愁。跟着我们走脱发包你有。组织打赏账户为柠檬的账户请标注「NCC」并留下您的名字以下地址可查看收支明细https://github.com/dotnetcore/Home/blob/master/Statement-of-Income-and-Expense.mdOpenNCC专注.NET技术的公众号https://www.dotnetcore.xyz微信IDOpenNCC长按左侧二维码关注欢迎打赏组织给予我们更多的支持