dotnet-exec 0.5.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 references
在 0.5.0 版本中用戶可以自定義 reference,你可以使用 -r
/--reference
選項來自定義引用的本地的 dll 或者 nuget 包
比如說下面這個引用 nuget 包的示例
dotnet-exec?"code:typeof(CsvHelper).Assembly.Location.Dump()"?-r?"nuget:WeihanLi.Npoi"?-u?"WeihanLi.Npoi"
這里引用了 WeihanLi.Npoi
這個 nuget 包,沒有指定版本的時候默認使用最新的穩定版本,目前是 2.3.0 所以我們看到的輸出結果會是 2.3.0
我們也可以指定具體的 NuGet 包版本,比如:
dotnet-exec?"code:typeof(CsvHelper).Assembly.Location.Dump()"?-r?"nuget:WeihanLi.Npoi,2.1.0"?-u?"WeihanLi.Npoi"
我們也可以直接引用本地的 dll,比如我們引用上面 nuget 包中的本地 dll
dotnet-exec?"code:typeof(CsvHelper).FullName.Dump()"?-r?"C:\Users\Weiha\.nuget\packages\weihanli.npoi\2.3.0\lib/net6.0/WeihanLi.Npoi.dll"?-u?"WeihanLi.Npoi"
Docker support enhancements
如果你不是 dotnet 開發者,或者不想安裝 dotnet 環境,你也可以使用 docker 來嘗試它
docker?run?--rm?weihanli/dotnet-exec:0.5.0?dotnet-exec?"code:(1+1).Dump()"
之前 docker 鏡像是基于 SDK 的鏡像來打包的,鏡像比較大,0.5.0 版本開始使用 runtime 鏡像來打包,比原來的鏡像小了很多,對比 dockerhub 上鏡像大小,可以發現比原來的鏡像大小減少了大概 70%,可以參考:https://hub.docker.com/r/weihanli/dotnet-exec/tags
runtime 包中只包含了 runtime 程序集,不包含引用程序集,在編譯的時候會使用引用程序集,沒有 SDK 本地也就沒有了引用程序集,會 fallback 到 nuget 包,為了減少第一次運行時的等待時間,這里有一個比較 tricky 的做法在 Dockerfile 的最后運行了一個 dotnet-exec 'code:"Hello .NET".Dump()'
來下載 .NET 框架的引用程序集,這樣相同的 .NET 版本,就不需要再下載了,可以減少一些下載 NuGet 包和與 NuGet 服務器交互的時間,從而減少一些啟動時間
References
https://github.com/WeihanLi/dotnet-exec
https://www.nuget.org/packages/dotnet-execute/
https://hub.docker.com/r/weihanli/dotnet-exec