dotnet-exec 0.4.0 released
Intro
dotnet-exec
是一個 C# 程序的命令行小工具,可以用來運行一些簡單的 C# 程序而無需創建項目文件,而且可以自定義項目的入口方法,支持但不限于 Main 方法
Install/Update
dotnet-exec
是一個 dotnet tool,可以使用安裝 dotnet tool 的命令來安裝
安裝/更新最新穩定版本:
dotnet?tool?update?-g?dotnet-execute
安裝最新的 preview 版本:
dotnet?tool?update?-g?dotnet-execute?--prerelease
Updates
Features
Custom Usings
在 0.4.0 版本中支持用戶自定義 using 默認會包含默認的 using 引用,你也可以自定義要增加的 using
比如說下面這個示例,使用了一個 static using
dotnet-exec?'code:WriteLine(1+1);'?--using?"static?System.Console"
輸出結果如下:
如果不加這個引用的話就會報錯
我們也可以移除默認的 using 引用,只需要以 “-”開頭就可以了,比如下面這樣
前面可以正常編譯并執行的程序就變得編譯不通過了
Preview enhancement
在新版本中增加了一個 --preview
的選項來簡化 --lang-version=Preview
的配置,除了 LangVersion
配置之外,還會增加一個程序集 attribute [assembly:System.Runtime.Versioning.RequiresPreviewFeatures]
來啟用一些還在預覽中的一些特性,從 .NET 6 開始支持正式版發布中帶一些預覽特性的功能,使用的話需要配置這個 attribute,所以針對 preview 增加了這個 Attribute
Startup type
新的版本中增加了一個 --startup-type
的選項,默認如果有多個入口會找到第一個,startup-type
可以幫助找到更加準確的入口
Reference handling refactor
之前是直接把編譯好的 dll 加載到了默認的 AssemblyLoadContext
,這在一般情況下沒什么問題
但是在出現程序集版本沖突的時候就會報錯,新的版本中會使用單獨的 AssemblyLoadContext
,并且修復了之前單獨使用 AssemblyLoadContext
時執行代碼的問題,就是因為前面介紹的 Reference Assembly,在編譯時使用引用程序集,在執行時換成了包含實現的實現程序集去執行代碼,這樣我們在需要測試兩種版本下不同的行為就會變得簡單
Executor refactor
0.4.0 的版本中增加了 --executor-type
,類似于上一個版本中的 --compiler-type
,但是目前只提供了一種實現,主要為了便于更好的進行擴展
Docker support
如果你不是 dotnet 開發者,不想安裝 dotnet sdk,你也可以使用 docker 來嘗試它
docker?run?--rm?weihanli/dotnet-exec:0.4.0?dotnet-exec?"code:(1+1).Dump()"
Bug fix
修復 Linux 上 dotnet path 的問題
在 Linux 環境上默認的
dotnet
路徑并不是 dotnet 可執行文件,而是一個 symbol link 文件,需要找到對應真正的文件路徑,由于代碼的 BUG 導致沒有轉換成真正的文件路徑,在 0.4.0 版本中已經修復
More
目前 dotnet-exec 依賴于 SDK 環境,后面要改進一下,只需要 Runtime 環境就可以,這樣 docker 鏡像可以小很多,另外打算支持可以自定義引用,比如引用自己的 dll 或者指定的 Nuget 包
References
https://github.com/WeihanLi/dotnet-exec
https://www.nuget.org/packages/dotnet-execute/
https://hub.docker.com/repository/docker/weihanli/dotnet-exec