首页 > 资讯 > > 内容页

Natasha V5.2.2.1 正式发布._每日简讯

2023-04-26 15:35:16 来源:博客园


【资料图】

DotNetCore.Natasha.CSharp v5.2.2.1

使用迁移: builder.GetDelegateFromShortName() 更改为 builder.GetAssembly().GetDelegateFromShortName();builder.GetAssembly() 仍然不可多次编译, 请及时缓存结果.

DotNetCore.Natasha.Domain v5.2.0.1

变更一览

internal class Program    {        static void Main(string[] args)        {            //准备工作            NatashaManagement.Preheating();            AssemblyCSharpBuilder builder = new();            builder.Domain = DomainManagement.Random();            //填充一个            builder.AddWithDefaultUsing("public class A { }");            //此 API 可以在不用编译的情况下获取到已经格式化好的语法树.            //注: GetAssembly 方法中已包括此方法, 但不会重复运行.            builder.GetAvailableCompilation();            var assemblyA = builder.GetAssembly();            ShowAssemblyInfo(assemblyA);            ShowSyntaxTree(builder.Compilation!);            //清除编译信息,使 builder 可以重新组合 编译信息.            builder.ClearCompilationCache();            //重置程序集名,以免编译时产生冲突.            builder.WithRandomAssenblyName();            //向 builder 中追加类型 B.            builder.AddWithDefaultUsing("public static class B{ public static void Show(){ Console.WriteLine(\"HelloWorld!\"); } }");                        var assemblyAB = builder.GetAssembly();            ShowAssemblyInfo(assemblyAB);            ShowSyntaxTree(builder.Compilation!);            //反射方法并生成委托            var action = assemblyAB.GetDelegateFromShortName("B", "Show");            Console.WriteLine("运行方法:");            action();            //action.DisposeDomain();            //Console.WriteLine(DomainManagement.IsDeleted(builder.Domain!.Name!));            Console.ReadKey();            static void ShowAssemblyInfo(Assembly assembly)            {                Console.WriteLine("此程序集名字:"+assembly.FullName);                Console.WriteLine("此程序集是否为动态程序集:" + (assembly.IsDynamic ? "是" : "否"));                Console.WriteLine("编译后的程序集中类的数量:" + assembly.GetTypes().Length);                Console.WriteLine("程序集中的类分别是:" + string.Join(",", assembly.GetTypes().Select(item => item.Name)));                           }            static void ShowSyntaxTree(Compilation compilation)            {                Console.WriteLine("---------------------------");                foreach (var item in compilation.SyntaxTrees)                {                    Console.WriteLine("脚本代码:");                    Console.WriteLine(item.ToString());                }                Console.WriteLine("---------------------------");            }        }    }

结果如下:

此程序集名字:9a7962dc0b004c2481d615c5e044c6df, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null此程序集是否为动态程序集:否编译后的程序集中类的数量:3程序集中的类分别是:EmbeddedAttribute,RefSafetyRulesAttribute,A-----------脚本代码-----------public class A{}-----------------------------此程序集名字:a17ce8ef9c164e558facf13425b279c6, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null此程序集是否为动态程序集:否编译后的程序集中类的数量:4程序集中的类分别是:EmbeddedAttribute,RefSafetyRulesAttribute,A,B-----------脚本代码-----------public class A{}using System;public static class B{    public static void Show()    {        Console.WriteLine("HelloWorld!");    }}-----------------------------运行方法:HelloWorld!
最近更新