欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

動(dòng)態(tài)編譯庫(kù) Natasha 5.0 兼容版本發(fā)布

Natasha 5.0 版本已于 2022/10/10 日發(fā)布, 此次大版本更迭帶來(lái)了兼容性支持, 目前 Natasha 可以兼容 standard2.0 及 coreapp3.1 以上版本.

創(chuàng)新互聯(lián)是一家專業(yè)提供吉林企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)、HTML5、小程序制作等業(yè)務(wù)。10年已為吉林眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站建設(shè)公司優(yōu)惠進(jìn)行中。

下載使用 NuGet\Install-Package DotNetCore.Natasha.CSharp -Version 5.0.0.


引擎分離

該版本分離了編譯引擎, Natasha 將根據(jù) <TargetFramework> {NET VERSION} </TargetFramework> 目標(biāo)版本來(lái)適配對(duì)外的 API.

  • 單域編譯引擎

    • 兼容 Standard2.0(Core3.1 以下) 版本, 動(dòng)態(tài)構(gòu)建將在主域中進(jìn)行, 您無(wú)法體驗(yàn)到多域編程帶來(lái)的好處, 也無(wú)法卸載動(dòng)態(tài)編譯輸出的程序集.

    • 不兼容舊版 Natasha API, 舊版 Natasha 僅支持多域編程, 并提供了多域方面的 API, 而單域引擎是從多域引擎分離簡(jiǎn)化而來(lái), 它將失去一些非必要的 API.


  • 多域編譯引擎

    • 兼容 Core3.1 以上版本, 支持程序集卸載, 域功能隔離, 插件加載卸載等操作.

    • 兼容舊版 Natasha API, 本次升級(jí)保留了多域環(huán)境應(yīng)有的 API, 未做改變, .


代碼分離

本次版本在源碼層,分為 MultiDomain / Public / SingleDomain 三部分, 并使用自定義宏 MULTI 來(lái)區(qū)分單/多域, 從工程文件上做兼容隔離允許 Natasha 后續(xù)的升級(jí)工作不必過(guò)多的關(guān)注兼容性代碼, 多域引擎仍然是 Natasha 未來(lái)版本的主戰(zhàn)場(chǎng), 迭代優(yōu)化工作將在 MultiDomain 文件夾中進(jìn)行.
相比較有特色的 API {OperatorClass}.DefaultDomain/CreateDomain/RandomDomain/UseDomain 單域版僅有 {OperatorClass}.DefaultDomain 一個(gè) API, 單域引擎的編譯結(jié)果均加載到主域中, 因此也不具備隔離和卸載功能.


使用須知

  • 編譯前提 : 使用 字符串腳本 需要對(duì)編譯原理有一定的了解, Roslyn 及 Natasha 簡(jiǎn)化了復(fù)雜的理論依據(jù)及構(gòu)建過(guò)程, 使用 Natasha 您只需關(guān)注3點(diǎn):

    • 元數(shù)據(jù)管理, 熟悉 Emit / Expression 的同學(xué)應(yīng)該清楚, 在構(gòu)建過(guò)程中可能用到反射, 比如 propertyInfo / fieldInfo / methodInfo, 因?yàn)樵诰幊讨兄魂P(guān)注使用,而忽視了元數(shù)據(jù)對(duì)動(dòng)態(tài)編譯的重要性, 從而切換到字符串編譯的時(shí)候出現(xiàn)各種各樣的問(wèn)題, Roslyn 和 Natasha 同樣是需要元數(shù)據(jù)的, 而元數(shù)據(jù)的來(lái)源有 引用程序集,內(nèi)存程序集,實(shí)際程序集, 除內(nèi)存程序集外元數(shù)據(jù)均記錄在 DLL 文件中, 因此您可以看到一些構(gòu)建代碼是這樣: NatashaManagement.AddGlobalReference("1.dll"); 這一步的缺失可能導(dǎo)致錯(cuò)誤: 找不到 RuntimeMetadataVersion 的值。找不到包含 System.Object 的程序集,或未通過(guò)選項(xiàng)為 RuntimeMetadataVersion 指定值。, 引用管理對(duì)程序來(lái)講是有一定負(fù)擔(dān)的, 因?yàn)槟壳斑€不能從內(nèi)存程序集中提取元數(shù)據(jù), 所以需要以文件方式來(lái)添加, 這也導(dǎo)致你發(fā)布動(dòng)態(tài)編譯的程序時(shí)需要有完備的引用文件跟隨, 因此會(huì)導(dǎo)致您發(fā)布的包體積變大, 至于環(huán)境需要哪些引用文件我們交給 DotNetCore.Compile.Environment 環(huán)境包來(lái)解決, 如果您不能很好的管理引用, 請(qǐng)引入該包全面覆蓋當(dāng)前程序的元數(shù)據(jù).

    • Using 管理, 這關(guān)乎著元數(shù)據(jù)的引用來(lái)源, 任何動(dòng)態(tài)構(gòu)建都是以一個(gè)完整類(lèi)方式進(jìn)行, 那么完整的類(lèi) using 代碼是必不可少的一部分, Natasha 的構(gòu)建模板可以覆蓋大部分 using 并有語(yǔ)義過(guò)濾處理異常 using, 如果您直接使用 AssemblyCSharpBuilder 來(lái)構(gòu)建代碼則需要注意腳本中的 using 部分.

  • 編譯環(huán)境 : 編譯環(huán)境包已不在新版的 Natasha 中,推薦使用 Natasha 的 API NatashaManagement.AddGlobalReference/AddGlobalUsing 來(lái)管理全局引用及 Using 緩存, 如果您不能很好管理的元數(shù)據(jù)引用, 請(qǐng)引入 DotNetCore.Compile.Environment 包來(lái)解決元數(shù)據(jù)引用的問(wèn)題.

  • 輸出環(huán)境 : 若您覺(jué)得生成文件中有較多的多語(yǔ)言適配, 可以使用 <SatelliteResourceLanguages>en</SatelliteResourceLanguages> 來(lái)指定默認(rèn)的資源語(yǔ)言.

  • 二義性錯(cuò)誤 : 該問(wèn)題仍然被歸屬到用戶的錯(cuò)誤編程行為中, 并不該由 IDE 或 Natasha 自動(dòng)解決, 我仍傾向于在命名空間發(fā)生沖突時(shí)由用戶手動(dòng)改解決該問(wèn)題, 上下文語(yǔ)義環(huán)境不能百分百推測(cè)出用戶想使用某個(gè)命名空間.目前推薦的三種方法:

    • 使用 Natasha.CSharp.Extension.Ambiguity 擴(kuò)展包及 .Using()/.ConfigUsing() 模板自帶的方法指定優(yōu)先級(jí)最高的 Using. (該包將在不久后以獨(dú)立項(xiàng)目存在,它并不屬于 Natasha 項(xiàng)目, 晚于 Natasha5.0 發(fā)布)
    • 直接使用引擎 AssemblyCSharpBuilder 編譯字符串, 在字符串層面替換.
    • 自寫(xiě)語(yǔ)義過(guò)濾方法, 更新編譯單元中的語(yǔ)法樹(shù), 使用 Natasha 的語(yǔ)義擴(kuò)展方法來(lái)添加您的過(guò)濾方法assemblyCSharpBuilder.AddSemanticAnalysistor(Func<AssemblyCSharpBuilder, CSharpCompilation, CSharpCompilation>) (需要有語(yǔ)法語(yǔ)義相關(guān)編程經(jīng)驗(yàn)).

案例

一個(gè)盡可能復(fù)雜的案例:

var action = NDelegate

//使用隨機(jī)域 也可以使用 CreateDomain / UseDomain / DefaultDomain 
//Core3.1以下僅能使用 DefaultDomain
.DefaultDomain()

//[可選API] 必要時(shí)使用 ConfigBuilder 配置編譯單元(下面只為展示API, 有需求就用, 沒(méi)需求不用寫(xiě))
.ConfigBuilder(builder => builder

  //配置編譯器選項(xiàng)
 .ConfigCompilerOption(opt => opt
    //配置平臺(tái)
   .SetPlatform(Microsoft.CodeAnalysis.Platform.AnyCpu)
    //Release 方式編譯
   .CompileAsRelease()
    //開(kāi)啟可空警告
   .SetNullableCompile(Microsoft.CodeAnalysis.NullableContextOptions.Warnings))

  //配置語(yǔ)法選項(xiàng)
 .ConfigSyntaxOptions(opt => opt
    //配置支持的腳本語(yǔ)言版本
   .WithLanguageVersion(Microsoft.CodeAnalysis.CSharp.LanguageVersion.CSharp8))

  //禁用語(yǔ)義檢查與過(guò)濾
 .DisableSemanticCheck()
)

 //[可選API] 配置該方法所在的類(lèi)模板
.ConfigClass(item => item
   //給類(lèi)配置一個(gè)名字,不用隨即名
  .Name("myClass")
   //不使用默認(rèn)域的 Using 緩存
  .NoGlobalUsing())

 //[可選API] 為類(lèi)模板添加 using 引用
.ConfigUsing("System")

 //這里的 API 參照定義的委托, 包括委托的參數(shù)
 //例如 Action<int> / Func<int,int> 擁有一個(gè)參數(shù), 參數(shù)的名字請(qǐng)?jiān)?Action<int> / Func<int,int> 上 F12 查看定義獲取參數(shù)名.
.Action("Console.WriteLine(\"Hello World!\");");

action(); /*Output: Hello World!*/

更多案例 更多文檔


更新日志

  • 2022/09/05 - 2022/09/21

    • 分離引擎, 項(xiàng)目分為多域和單域, 以部分類(lèi)方式合并 API.
    • 使用 IndexOf 替代 Contans 方法做兼容.
    • 支持 netstandard2.0 及 coreapp3.1,net5.0,net6.0 版本.
    • 升級(jí) DotNetCore.SourceLink.Environment 依賴以支持 netstandard2.0/1 版本.
    • 升級(jí) DotNetCore.Compile.Environment 依賴以支持 netstandard2.0/1 版本.
  • 2022/09/30 - 2022/10/09

    • 使用 Assembly.ReflectionOnlyLoad 替代 MetadataLoadContext 解決單域引擎只讀元數(shù)據(jù)的問(wèn)題.
    • 優(yōu)化單域引擎初始化過(guò)程中掃描源dll文件的問(wèn)題.

分享文章:動(dòng)態(tài)編譯庫(kù) Natasha 5.0 兼容版本發(fā)布
文章位置:http://chinadenli.net/article12/dsoidgc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站、微信小程序App設(shè)計(jì)、搜索引擎優(yōu)化軟件開(kāi)發(fā)、企業(yè)網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)