動態編譯庫 Natasha 5.0 兼容版本發布( 二 )

assemblyCSharpBuilder.AddSemanticAnalysistor(Func<AssemblyCSharpBuilder, CSharpCompilation, CSharpCompilation>) (需要有語法語義相關編程經驗).案例一個盡可能復雜的案例:
var action = NDelegate//使用隨機域 也可以使用 CreateDomain / UseDomain / DefaultDomain//Core3.1以下僅能使用 DefaultDomain.DefaultDomain()//[可選API] 必要時使用 ConfigBuilder 配置編譯單元(下面只為展示API, 有需求就用, 沒需求不用寫).ConfigBuilder(builder => builder//配置編譯器選項 .ConfigCompilerOption(opt => opt//配置平臺.SetPlatform(Microsoft.CodeAnalysis.Platform.AnyCpu)//Release 方式編譯.CompileAsRelease()//開啟可空警告.SetNullableCompile(Microsoft.CodeAnalysis.NullableContextOptions.Warnings))//配置語法選項 .ConfigSyntaxOptions(opt => opt//配置支持的腳本語言版本.WithLanguageVersion(Microsoft.CodeAnalysis.CSharp.LanguageVersion.CSharp8))//禁用語義檢查與過濾 .DisableSemanticCheck()) //[可選API] 配置該方法所在的類模板.ConfigClass(item => item//給類配置一個名字,不用隨即名.Name("myClass")//不使用默認域的 Using 緩存.NoGlobalUsing()) //[可選API] 為類模板添加 using 引用.ConfigUsing("System") //這里的 API 參照定義的委托, 包括委托的參數 //例如 Action<int> / Func<int,int> 擁有一個參數, 參數的名字請在 Action<int> / Func<int,int> 上 F12 查看定義獲取參數名..Action("Console.WriteLine(\"Hello World!\");");action(); /*Output: Hello World!*/更多案例 更多文檔
更新日志

  • 2022/09/05 - 2022/09/21
    • 分離引擎, 項目分為多域和單域, 以部分類方式合并 API.
    • 使用 IndexOf 替代 Contans 方法做兼容.
    • 支持 netstandard2.0 及 coreapp3.1,net5.0,net6.0 版本.
    • 升級 DotNetCore.SourceLink.Environment 依賴以支持 netstandard2.0/1 版本.
    • 升級 DotNetCore.Compile.Environment 依賴以支持 netstandard2.0/1 版本.
  • 2022/09/30 - 2022/10/09
    • 使用 Assembly.ReflectionOnlyLoad 替代 MetadataLoadContext 解決單域引擎只讀元數據的問題.
    • 優化單域引擎初始化過程中掃描源dll文件的問題.

推薦閱讀