DotNetCore.Natasha.CSharp v5.2.2.1

  • 使用 NMS Template 接管 CI 的部分功能.
  • 取消 SourceLink.GitHub 的继承性.
  • 优化几处内存占用问题.
  • 增加隐式 using 配置文件以支持隐式 using 引用. 当项目开启 <ImplicitUsings>enable</ImplicitUsings> 时,自动生效.
  • 增加初始化 PE 信息判断, 跳过无效 DLL 文件.
  • 整改 AssemblyCSharpBuilder, 修改几处 API:
    • 增加 GetAvailableCompilation, 开发者使用此API可以进行单独编译信息整合以及语义语法修剪,其结果为 Compilation 属性, 为下一步编译程序集做准备.
    • 增加 ClearCompilationCache 移除当前 编译单元的编译信息, 运行 GetAvailableCompilation/GetAssembly 将重新构建编译信息.
    • 增加 WithRandomAssenblyName 将当前编译单元的程序集名更改为 GUID 随机名.
    • 增加 ClearScript 清除当前编译单元储存的所有C#脚本代码.
    • 增加 Clear 清除脚本代码,清除编译信息,清除程序集名.
  • 增加一个节省性能开销的 API.
    • AnalysisIgnoreAccessibility(), 调用此方法,语义检测将检测元数据的访问级别,可能增加性能开销.
    • NotAnalysisIgnoreAccessibility(), 调用此方法,语义检测将忽视检测元数据的访问级别,降低开销(编译单元默认使用的是低开销方案), 安全编程请选择此项.
  • 编译单元增加两个方便操作的 API.
    • AddWithFullUsing(script): 增加脚本时,默认覆盖全域的 Using 引用.
    • AddWithDefaultUsing(script): 增加脚本时,默认覆盖主域的 Using 引用.
  • 新增 Type 的扩展 API:
    • GetDelegateFromType , 参考 GetDelegateFromShortName 的用法.
  • [破坏性更改] 下列 API, 从 AssemblyCSharpBuilder 的扩展方法 更改为 Assembly 类型的扩展方法:
    • GetTypeFromShortName / GetTypeFromFullName,
    • GetMethodFromShortName / GetMethodFromFullName
    • GetDelegateFromShortName / GetDelegateFromFullName

使用迁移: builder.GetDelegateFromShortName() 更改为 builder.GetAssembly().GetDelegateFromShortName();

builder.GetAssembly() 仍然不可多次编译, 请及时缓存结果.

DotNetCore.Natasha.Domain v5.2.0.1

  • 取消 SourceLink.GitHub 的继承性.
  • 增加 全局 using 配置文件以支持全局 using 引用.

变更一览

    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<Action>("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!

Natasha V5.2.2.1 稳定版正式发布.的更多相关文章

  1. Angular 2 最终版正式发布

    9月15日,Angular 2 的最终版正式发布了. 作为 Angular 1 的全平台继任者 -- Angular 2 的最终版,意味着什么? 意味着稳定性已经得到了大范围用例的验证: 意味着已经针 ...

  2. Android Studio 1.0 (稳定版) 完全攻略

    这篇博文中主要从以下几点进行叙述: 1.Android Studio安装与使用 2.Android Studio特性 3.Android Studio优点 Android Studio 安装与使用 A ...

  3. 深度技术GHOST WIN7系统32,64位旗舰稳定版

    系统来自系统妈:http://www.xitongma.com 系统概述 深度技术ghost win8 X86(32位)旗舰稳定版系统集成了SATA/RAID/SCSI驱动,支持P45. MCP78. ...

  4. Apache Spark 3.0 预览版正式发布,多项重大功能发布

    2019年11月08日 数砖的 Xingbo Jiang 大佬给社区发了一封邮件,宣布 Apache Spark 3.0 预览版正式发布,这个版本主要是为了对即将发布的 Apache Spark 3. ...

  5. 年度重大升级,IntelliJ IDEA 2019.2 稳定版发布

    文章转载自 OSCHINA 社区 [http://www.oschina.net] 期待已久. 7月24日,JetBrains 正式发布了 IntelliJ IDEA 2019.2 稳定版. 作为 I ...

  6. Microsoft.Bcl.Build 1.0.10 稳定版发布

    Microsoft.Bcl.Build 1.0.10 稳定版发布 解决了之前 1.0.8 在未下载相应的Nuget Package 的情况下项目无法加载的情况 但由于 Microsoft.Net.Ht ...

  7. Ubuntu 14.04 安装最新稳定版Nginx 1.6.0

    如果已经安装,请先卸载sudo apt-get remove nginx最新的稳定版Nginx 1.6.0在ubuntuupdates ppa库中提供,网址http://www.ubuntuupdat ...

  8. 腾讯云环境配置之PHP5.6.3 + redis扩展 稳定版

    腾讯云环境配置之PHP5.6.3 + redis扩展 稳定版 时间:2015-01-18 01:41来源:linux.it.net.cn 作者:IT   #由于上文装过yum groupinstall ...

  9. Jeasyframe 开源框架 稳定版 V1.5 发布

    这是Jeasyframe开源框架的第一个稳定版本,感谢一起帮忙测试并给予反馈的网友们. 框架官网:http://www.jeasyframe.org/ 产品介绍: Jeasyframe开源框架是基于S ...

  10. Xamarin for Visual Studio 3.11.666 稳定版 破解补丁 Version 3

    前提概要 1.全新安装请参考 安装 Xamarin for Visual Studio. 2.本次补丁包含: ① Xamarin for Visual Studio 3.11.666 ② Xamari ...

随机推荐

  1. 转载·Pycharm Pro“This license 56ZS5PQ1RF has been cancelled” 激活码失效处理记录

    今天打开许久没用的Pycharm提示激活码过期,激活提示:"This license 56ZS5PQ1RF has been cancelled" 解决方法如下 首先修改hosts ...

  2. DHCP分配IP的流程

    1.DHCP客户端以广播的形式发送DHCP Discover报文 2.所有的DHCP服务端都可以接收到这个DHCP Discover报文,所有的DHCP服务端都会给出响应,向DCHP客户端发送一个DH ...

  3. 入门级java开发环境的配置安装

    为了能够在计算机上开发Java程序和运行Java程序,就需要在Windows操作系统上配置Java开发环境. 首先,安装JDK: 1.在Oracle官网上下载JavaSE: 2.在Download下载 ...

  4. Oracle表主键作为外键都用在哪些表查询

    Oracle中,如果设置了外键,删除数据时,必须将外键关联一并删除,但是如果对项目不是很熟悉时,我们无法判断到底都在哪些表中有外键关联,以下提供了一个查询的SQL,可以通过数据库查询,查找到所有的外键 ...

  5. 使用ActiveMQ中遇到的端口占用问题

    原Linux虚拟机中安装了ActiveMQ,EMQX.后期使用中主要使用EMQX来实现消息服务,停止了ActiveMQ.但是虚拟机挂起之后,长时间未再使用.近期由于有使用ActiveMQ的需要,而临时 ...

  6. k8s探针

    探针是由kubelet对容器执行的定期诊断.要执行诊断,kubelet调用由容器实现的Handler.有三类处理程序: ExecAction:在容器内执行指定命令.如果命令退出时返回码为0认为诊断成功 ...

  7. centos7开放8080端口

    1. firewall-cmd --state  :令防火墙处于开启状态 systemctl start firewalld.service: 2. firewall-cmd --zone=publi ...

  8. svn操作方法

    1.SVN1.1.SVN概述1.1.1.为什么需要使用svn版本控制软件协作开发远程开发版本回退 1.1.2.解决之道SCM:软件配置管理所谓的软件配置管理实际就是对软件源代码进行控制与管理. CVS ...

  9. UI资源,可在几分钟内创建精美的设计

    UI资源,可在几分钟内创建精美的设计 组件:https://headlessui.com 图标:https://icons8.com 插画:https://undraw.co/illustration ...

  10. Maven项目的创建教程

    1.创建Maven项目 首先File->New新建一个Maven项目,选择相应地址保存,点击CREATE完成新建 2.改成Web项目 右键选择Add Framework Support... 再 ...