Intro
最近在做一个小工具来简化 C# 代码的运行,很多示例程序就不需要再完整的运行代码来实现了,只需要单个文件就可以运行,之前也有过一些介绍,可以结合上一篇的介绍 dotnet-exec 小工具 ,最近更新了一些新的内容,一起看一下支持了哪些特性吧.
Install
dotnet-exec
是一个 dotnet tool,你可以通过下面的命令来安装或者更新 dotnet-exec
工具
dotnet tool update -g dotnet-execute
Get started
如果想要运行某一个 C# 文件,只需要指定好文件路径就可以了
dotnet-exec HttpPathJsonSample.cs
如果代码中没有定义 Main 方法并且不是 Top-Level statements,需要自定义入口方法,可以使用 --entry
来指定入口方法
dotnet-exec HttpPathJsonSample.cs --entry MyMain
Features
Remote script
在之前的版本中我们只支持运行本地的代码文件,在新的版本中,我们支持了指定一个远程的地址,比如 Github
dotnet-exec https://github.com/WeihanLi/SamplesInPractice/blob/master/net7Sample/Net7Sample/ArgumentExceptionSample.cs
你可以直接指定一个 Github 地址,针对 Github 的代码做了一定的优化,前面的命令等同于下面的命令
dotnet-exec https://raw.githubusercontent.com/WeihanLi/SamplesInPractice/master/net7Sample/Net7Sample/ArgumentExceptionSample.cs
实际获取代码内容是获取这个文件的原始内容,如果直接用第一个地址的话会返回一个 html 页面,而不是我们期望的代码内容,为了方便程序里会自动做一个转换
也支持指定某个具体的 commit,例如:
dotnet-exec https://github.com/WeihanLi/SamplesInPractice/blob/9e3b5074f4565660f4d45adcc3dca662a9d8be00/net7Sample/Net7Sample/HttpClientJsonSample.cs
类似的转换还支持了 Github 的 Gist,比如下面这两个命令是一样的效果
dotnet-exec https://gist.github.com/WeihanLi/7b4032a32f1a25c5f2d84b6955fa83f3
dotnet-exec https://gist.githubusercontent.com/WeihanLi/7b4032a32f1a25c5f2d84b6955fa83f3/raw
你也可以直接指定完整的文件地址:
dotnet-exec https://gist.githubusercontent.com/WeihanLi/7b4032a32f1a25c5f2d84b6955fa83f3/raw/3e10a606b4121e0b7babcdf68a8fb1203c93c81c/print-date.cs
RawCode
我们也可以直接指定代码文本,比如:
dotnet-exec "code:(1+1).Dump();"
dotnet-exec "code:WebApplication.Create().Run();"
CompilerType
在原来的基础上实现了三种方式来进行编译,这三种方式我们在前面的文章中都提到过,可以参考前面的 Roslyn 编译代码和 Workspace 的介绍
-
default:使用 roslyn 转换语法树来获取编译
-
workspace:使用 AdHoc Workspace API 来生成编译
-
advanced: 使用 MSBuild Workspace API 来进行编译,只支持本地文件,需要指定项目文件路径,默认会在当前目录搜索项目文件
More
在逛 Github 的时候偶然间也发现了类似的提议,让 C# 程序更为简单,不需要显式的有一个项目文件,类似于 python/nodejs 一样,直接 python hello.py
就可以运行程序,让 C# 也更加简单一些
感兴趣的可以参考:
https://github.com/dotnet/sdk/issues/12328
https://github.com/dotnet/designs/pull/213