Natasha V5.2.2.1 稳定版正式发布.
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 稳定版正式发布.的更多相关文章
- Angular 2 最终版正式发布
9月15日,Angular 2 的最终版正式发布了. 作为 Angular 1 的全平台继任者 -- Angular 2 的最终版,意味着什么? 意味着稳定性已经得到了大范围用例的验证: 意味着已经针 ...
- Android Studio 1.0 (稳定版) 完全攻略
这篇博文中主要从以下几点进行叙述: 1.Android Studio安装与使用 2.Android Studio特性 3.Android Studio优点 Android Studio 安装与使用 A ...
- 深度技术GHOST WIN7系统32,64位旗舰稳定版
系统来自系统妈:http://www.xitongma.com 系统概述 深度技术ghost win8 X86(32位)旗舰稳定版系统集成了SATA/RAID/SCSI驱动,支持P45. MCP78. ...
- Apache Spark 3.0 预览版正式发布,多项重大功能发布
2019年11月08日 数砖的 Xingbo Jiang 大佬给社区发了一封邮件,宣布 Apache Spark 3.0 预览版正式发布,这个版本主要是为了对即将发布的 Apache Spark 3. ...
- 年度重大升级,IntelliJ IDEA 2019.2 稳定版发布
文章转载自 OSCHINA 社区 [http://www.oschina.net] 期待已久. 7月24日,JetBrains 正式发布了 IntelliJ IDEA 2019.2 稳定版. 作为 I ...
- Microsoft.Bcl.Build 1.0.10 稳定版发布
Microsoft.Bcl.Build 1.0.10 稳定版发布 解决了之前 1.0.8 在未下载相应的Nuget Package 的情况下项目无法加载的情况 但由于 Microsoft.Net.Ht ...
- Ubuntu 14.04 安装最新稳定版Nginx 1.6.0
如果已经安装,请先卸载sudo apt-get remove nginx最新的稳定版Nginx 1.6.0在ubuntuupdates ppa库中提供,网址http://www.ubuntuupdat ...
- 腾讯云环境配置之PHP5.6.3 + redis扩展 稳定版
腾讯云环境配置之PHP5.6.3 + redis扩展 稳定版 时间:2015-01-18 01:41来源:linux.it.net.cn 作者:IT #由于上文装过yum groupinstall ...
- Jeasyframe 开源框架 稳定版 V1.5 发布
这是Jeasyframe开源框架的第一个稳定版本,感谢一起帮忙测试并给予反馈的网友们. 框架官网:http://www.jeasyframe.org/ 产品介绍: Jeasyframe开源框架是基于S ...
- Xamarin for Visual Studio 3.11.666 稳定版 破解补丁 Version 3
前提概要 1.全新安装请参考 安装 Xamarin for Visual Studio. 2.本次补丁包含: ① Xamarin for Visual Studio 3.11.666 ② Xamari ...
随机推荐
- NRF52832的FDS程序,参考非蓝牙例程修改而来(需要增加DFU的基础上只要增加如下程序即可解决)
/* Dummy configuration data. */ static configuration_t m_dummy_cfg = { .config1_on = false, .config2 ...
- 助教工作总结(高级语言程序设计C语言)
* { font-family: 宋体 } zw { font-size: 20px; line-height: 2em } 一.助教工作的具体职责和任务 在本学期担任陈欣老师的计科专业21级c语 ...
- 测试环境docker化实践
测试环境对于任何一个软件公司来讲,都是核心基础组件之一.测试环境伴随着发展也从单一的几套环境发展成现在的任意的docker动态环境+docker稳定环境环境体系.期间环境系统不断的演进,去适应集群扩张 ...
- Matlab - 在Figure中调整X轴到x=0,y=0处
原图 调整 选中图像后打开属性编辑器,将X轴位置修改为原点. 结果
- linux 镜像备份
linux 镜像备份 使用linux虚拟机的方法 优点 镜像大小比较小 缺点 速度可能比较慢 方法 1.打开虚拟机 我用的ubuntu,读卡器连接电脑虚拟机,ubuntu一般会自动挂载 df -h # ...
- Java执行带空格的语句命令,cmd无法识别带空格路径的问题
带空格的会识别不了 先说解决方法: 1:用cmd中的start: 在JAVA中可以如此使用: Runtime.getRuntime().exec("cmd /c start \"\ ...
- fastposter v2.13.0 一分钟完成开发海报 [云服务来袭]
fastposter v2.13.0 一分钟完成开发海报 [云服务来袭] fastposter海报生成器是一款快速开发海报的工具.只需上传一张背景图,在对应的位置放上组件(文字.图片.二维.头像)即可 ...
- 基于声网 Flutter SDK 实现多人视频通话
前言 本文是由声网社区的开发者"小猿"撰写的Flutter基础教程系列中的第一篇.本文除了讲述实现多人视频通话的过程,还有一些 Flutter 开发方面的知识点.该系列将基于声网 ...
- day11-MySql存储结构
MySql存储结构 参考视频:MySql存储结构 1.表空间 不同的存储引擎在磁盘文件上的结构均不一致,这里以InnoDB为例: CREATE TABLE t(id int(11)) Engine = ...
- 【读书笔记】组合计数中的行列式方法 专题3 完美匹配: the Pfaffian method
目录 专题3-Perfect matchings: the Pfaffian method 一些定义 用2×1的砖密铺a×b的大矩形的方法数 专题3-Perfect matchings: the Pfa ...