日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2023/12/4 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【C】Natasha V1.3.6.0 的升级日志 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章轉載授權級別: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.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 的參數;

在不指定返回值的情況下,默認使用 TDelegate 的返回類型;

var delegateAction = FastMethodOperator.New .UseAsync() .MethodBody(@" string result = arg1 +"" ""+ arg2; Console.WriteLine(result); return result;") .Complie&lt;Func&lt;string, string, Task&lt;string&gt;&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.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.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 建議下,完善了類、接口、抽象類、虛方法的實現。??

ProxyOperator&lt;Interface&gt; builder = new ProxyOperator&lt;Interface&gt;(); builder.OopName("InterfaceClass"); builder["InterfaceMethod"]?=?"return?123456;";??//?public?method builder.Compile(); var test = builder.Create("InterfaceClass"); ProxyOperator&lt;Class&gt;?builder?=?new?ProxyOperator&lt;Class&gt;(); builder.OopName("TestClass"); builder["NormalMethod"]?=?"return?123456;";?????//new?method builder["VirtualMethod"]?=?"return?123456;";????//override method builder.Compile(); dynamic test = Activator.CreateInstance(builder.TargetType); ProxyOperator&lt;Abstract&gt;?builder?=?new?ProxyOperator&lt;Abstract&gt;(); 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.cs

7. 添加包裝類

guodf、Teng、WeihanLi 的建議下,添加包裝類提升使用體驗。

?? var result = NewClass.Create(Action&lt;OopOperator&gt; action); var?result?=?NewInterface.Create(Action&lt;OopOperator&gt;?action); var?result?=?NewStruct.Create(Action&lt;OopOperator&gt;?action); var type = result.Type; var error = result.Exception; var?result?=?NewMethod.Create(Action&lt;FastMethodOperator&gt;?action); var error = result.Exception; var method = result.Method; method();

8. 支持非安全方法

根據 FUTURE* 的需求,支持了非安全方法的編譯,現可以使用 UseUnsafe 方法來實現。

9. 快速實現動態功能

增加了 NFunc/NAction 兩種快速實現委托的操作類。

//NFunc 和 NAction 支持的方法: // 普通方法:Delegate // 異步方法:AsyncDelegate // 非安全方法:UnsafeDelegate // 非安全異步方法:UnsafeAsyncDelegate var action = NFunc&lt;string, string, Task&lt;string&gt;&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, 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://github.com/dotnetcore

打賞一杯酒,削減三分愁。跟著我們走,脫發包你有。

組織打賞賬戶為檸檬的賬戶,請標注「NCC」,并留下您的名字,以下地址可查看收支明細:https://github.com/dotnetcore/Home/blob/master/Statement-of-Income-and-Expense.md

OpenNCC,專注.NET技術的公眾號

https://www.dotnetcore.xyz

微信ID:OpenNCC

長按左側二維碼關注

歡迎打賞組織

給予我們更多的支持

總結

以上是生活随笔為你收集整理的【C】Natasha V1.3.6.0 的升级日志的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。