dotnet-exec
是一个 dotnet tool 一个命令行小工具,可以帮助我们方便地执行 C# 代码,可以用来运行一些简单的 C# 程序而无需创建项目文件,让 C# 像 python/nodejs 一样简单,而且可以自定义项目的入口方法,支持但不限于 Main 方法。
dotnet-exec
0.29.0 发布了,新增了标准输入中代码的支持,以及通过支持 dotnet run file
新引入的 package 和 sdk 引用语法
dotnet-exec
是一个 dotnet tool,可以使用安装 dotnet tool 的命令来安装
安装/更新最新稳定版本:
dotnet tool update -g dotnet-execute
安装最新的 preview 版本:
dotnet tool update -g dotnet-execute --prerelease
执行 dotnet-exec -h
或者 dotnet-exec --help
即可看到一些使用说明,更多使用可以参考文档
`dotnet-exec --help`
也可以通过 docker/podman 来在不安装 dotnet sdk 的情况下体验,例如:
docker run --rm weihanli/dotnet-exec:0.29.0 "ApplicationHelper.RuntimeInfo"
docker
如果在 GitHub Action 中使用又不想安装 dotnet-sdk 可以试试这个打包好的 github action
https://github.com/WeihanLi/dotnet-exec-action
- name:dotnet-execscript
uses:WeihanLi/dotnet-exec-action@0.29.0
with:
script:"./build/build.cs"# script text or script path
options:"--web --debug"# optional
arguments:"target=test" # optional
dotnet-exec
0.29.0 开始支持了 stdin 可以更好地支持脚本的管道模式(pipe)
使用方式如下:
'Guid.NewGuid' | dotnet-exec
`guid pipe`
cat hello.cs | dotnet-exec
`cat file pipe`
.NET 10 preview 4 中的 dotnet run file 引入了一些新的语法,dotnet-exec 0.29.0 中有了一些初步的支持,比如 package 的引用和引用 Web SDK 以支持 ASP.NET Core
package reference sample
package reference
web sdk sample
web sdk sample
起初通过判断没有提供参数的时候从 Console.In
中读取,后来发现和 REPL 有点冲突,于是又改了下,改成下面这样判断就可以同时兼容 REPL 了
// try to read script content from stdin
var inputText = string.Empty;
if (Console.IsInputRedirected && Console.In.Peek() != -1)
{
inputText = await Console.In.ReadToEndAsync();
}
if (string.IsNullOrEmpty(inputText))
{
// start REPL when no input here
await repl.RunAsync(options);
return ;
}
之前的版本里我们已经支持第三方的脚本像是 linqpad 和 netpad,这里我们类似的将所有的文件都处理下,将文件开头的 #:
开头的
#: package
和 #: sdk
做一些处理,转成对应的 nuget package 引用和 ASP.NET Core 框架引用,具体实现细节可以参考代码