dotnet-exec 0.22.0 Released 及近期更新
Intro
好久没有同步 dotnet-exec 的更新了,今天想和大家分享一下 dotnet-exec 的最近的一些更新,目前最新的版本是 0.22.0 版本,总结一下从 0.19.0 版本到现在的一些更新
dotnet-exec 是一个 dotnet tool 一个命令行小工具,可以帮助我们方便地执行 C# 代码,可以用来运行一些简单的 C# 程序而无需创建项目文件,让 C# 像 python/nodejs 一样简单,而且可以自定义项目的入口方法,支持但不限于 Main 方法。
Multi scripts enhancements
之前多个 script 的时候需要通过 --ad/--addition option 来设置更多的 script,使用起来有所不便,也有小伙伴反馈多个脚本的时候使用起来不方便,所以在 0.19.0 版本中优化了一下多个 script 的支持,可以直接通过多个 script 来

Script reference support
之前的版本对于 C# script( csx) 的支持比较简单,从 0.19.0 版本开始支持解析 csx 中的 #r 的引用
支持了本地文件以及 nuget package 引用
#r "nuget: WeihanLi.Npoi, 2.4.2"
Console.WriteLine(WeihanLi.Npoi.CsvHelper.GetCsvText(new[]{ 1, 2, 3 }));
比如这样的文件,输出结果如下:

Web References Env
如果你使用 docker image 使用 :web tag 的时候会自动引用 asp.net core 框架引用,以及引用 web 默认的命名空间引用,之前需要使用 --web 选项,现在不需要了,省了一个 option 的配置
docker run --rm --pull=always weihanli/dotnet-exec:web "WebApplication.Create().Run();"

Respect Environment.ExitCode
之前的版本没有处理 Environment.ExitCode,如果代码里设置了 exit code 设置了 1 ,程序执行没有出错,实际的 exit code 会是 0,并没有 respect Environment.ExitCode,从 0.20.0 版本

Environment.ExitCode sample
Linqpad/Netpad script execute
除了 C# 项目里的代码,有时候也会执行 linqpad script,最近也有一个开源的 NetPad,它的 script 和 linqpad 略有不同,也支持了一下,现在可以使用 dotnet-exec 来执行这些脚本,因为 Linq 有一些 linqpad 的扩展,目前只支持比较简单 Dump 其他扩展暂不支持,有需要的小伙伴也可以来欢迎来提 issue & PR
dotnet-exec LinqpadSample.linq
dotnet-exec NetpadSample.netpad

REPL
0.22.0 版本中比较一个重要的更新是支持了一个简单的 REPL(Read Evaluate Print Loop),当没有参数提供的时候默认会启动 REPL, 也可以在启动的时候传入一些默认的引用,命名空间等设置

在遇到不熟悉的 API 的时候也可以通过在代码最后加入一个问号 ? 来获取代码提示(目前代码提示做的不太好,没有 inline 的 code completion,后面看大家需要再做优化吧,也可以先使用 csharprepl 项目,会有 inline 的 code completion 代码提示效果更好),如上图中的最后一个输入是 Guid.New?,代码提示是 NewGuid
我们也可以通过 #r nuget:<packageId[,packageVersion]> 来引用一个 nuget package,效果如下:

通过 #q/#exit 来退出 REPL,通过 #cls/#clear 来清除屏幕
启动时添加 web 框架引用

访问 web api

More
感觉有一些功能并没有在文档里体现出来,最近基于 docfx 搭建了一个文档站点,目前基于 github pages 部署了:
https://weihanli.github.io/dotnet-exec/index.html

后面有空再完善下文档
References
-
https://github.com/WeihanLi/dotnet-exec -
https://www.nuget.org/packages/dotnet-execute/ -
https://weihanli.github.io/dotnet-exec/ -
https://weihanli.github.io/dotnet-exec/ReleaseNotes.html -
https://github.com/WeihanLi/dotnet-exec/issues/17 -
https://github.com/WeihanLi/dotnet-exec/issues/20 -
https://github.com/WeihanLi/dotnet-exec/issues/21

