dotnet-exec 让 C# 程序更简单

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 页面,而不是我们期望的代码内容,为了方便程序里会自动做一个转换

dotnet-exec 让 C# 程序更简单

也支持指定某个具体的 commit,例如:

dotnet-exec https://github.com/WeihanLi/SamplesInPractice/blob/9e3b5074f4565660f4d45adcc3dca662a9d8be00/net7Sample/Net7Sample/HttpClientJsonSample.cs

dotnet-exec 让 C# 程序更简单

类似的转换还支持了 Github 的 Gist,比如下面这两个命令是一样的效果

dotnet-exec https://gist.github.com/WeihanLi/7b4032a32f1a25c5f2d84b6955fa83f3
dotnet-exec https://gist.githubusercontent.com/WeihanLi/7b4032a32f1a25c5f2d84b6955fa83f3/raw

dotnet-exec 让 C# 程序更简单

你也可以直接指定完整的文件地址:

dotnet-exec https://gist.githubusercontent.com/WeihanLi/7b4032a32f1a25c5f2d84b6955fa83f3/raw/3e10a606b4121e0b7babcdf68a8fb1203c93c81c/print-date.cs

 

dotnet-exec 让 C# 程序更简单

RawCode

我们也可以直接指定代码文本,比如:

dotnet-exec "code:(1+1).Dump();"
dotnet-exec "code:WebApplication.Create().Run();"

dotnet-exec 让 C# 程序更简单

dotnet-exec 让 C# 程序更简单

CompilerType

在原来的基础上实现了三种方式来进行编译,这三种方式我们在前面的文章中都提到过,可以参考前面的 Roslyn 编译代码和 Workspace 的介绍

  • default:使用 roslyn 转换语法树来获取编译

  • workspace:使用 AdHoc Workspace API 来生成编译

  • advanced: 使用 MSBuild Workspace API 来进行编译,只支持本地文件,需要指定项目文件路径,默认会在当前目录搜索项目文件

dotnet-exec 让 C# 程序更简单

More

在逛 Github 的时候偶然间也发现了类似的提议,让 C# 程序更为简单,不需要显式的有一个项目文件,类似于 python/nodejs 一样,直接 python hello.py 就可以运行程序,让 C# 也更加简单一些

感兴趣的可以参考:

https://github.com/dotnet/sdk/issues/12328

https://github.com/dotnet/designs/pull/213