.NET Core指令碼工具dotnet-script
什麼是dotnet-script
"dotnet-script"是github上一個開源的.net core global tool, 專案地址https://github.com/filipw/dotnet-script。使用它,開發人員可以獲得在命令列直接執行C#指令碼檔案的能力, 且不需要建立任何專案檔案。
安裝/解除安裝dotnet-script
.NET Core 2.1中引入了global tool, 所以你可以在命令列直接使用以下命令安裝dotnet-script
。
> dotnet tool install -g dotnet-script You can invoke the tool using the following command: dotnet-script Tool 'dotnet-script' (version '0.26.1') was successfully installed.
Tips: 為了使用global tool, 請安裝.NET Core SDK 2.1.300及以上版本。
如果希望解除安裝dotnet-script
, 請使用一下命令
> dotnet tool uninstall dotnet-script -g
建立第一個HelloWorld指令碼
下面我們通過一個最簡單的例子,說明一下dotnet-script
的使用方式。
首先我們建立一個helloworld.csx檔案, 並在檔案中編寫以下程式碼
Console.WriteLine("Hello World!");
你沒有看錯,這個檔案中只有一行程式碼,沒有任何的using, namespace等程式碼。
然後我們在命令列執行dotnet-script helloworld.csx
, 結果如下,"Hello World!"被正確的輸出了。
C:\script>dotnet-script helloworld.csx
Hello world!
建立一個新增Nuget引用的指令碼
在dotnet-script
可以支援使用Roslyn #r 語法(#r "nuget: {包名}, {版本號}"
)引用各種Nuget包。
例如,下面我們修改helloworld.csx檔案, 引入Newtownsoft.Json
庫,輸出一個序列化之後的字串。
#r "nuget: Newtonsoft.Json, 11.0.2" using Newtonsoft.Json; Console.WriteLine(JsonConvert.SerializeObject(new { Message = "HelloWorld!" }));
我們使用命令列dotnet-script helloworld.csx
重新執行helloworld.csx檔案, 結果如下
C:\script>dotnet-script helloworld.csx
{"Message":"HelloWorld!"}
Tips: 這裡使用的是預設的Nuget源, 如果你想手動新增其他Nuget源, 執行指令碼的時候,請新增
-s
引數, 例dotnet script foo.csx -s https://SomePackageSource
EHRL
最新版本的dotnet-script
還支援了EHRL - Read Evaluate Print Loop, 即讀取-求值-列印-迴圈, 這是一個在諸如Ruby、Python和Lisp這樣的動態語言才有的特性。
開發人員可以在命令列使用dotnet script
命令, 進入EHRL模式, 根據你輸入的表示式, dotnet-script
會幫你打印出表示式的結果。
例:
C:\script>dotnet script
> 2+2
4
> var myName = "Lamond Lu";
> Console.WriteLine(myName.ToUpper());
LAMOND LU
>
當然在這裡你也可以使用Roslyn #r 語法(#r "nuget: {包名}, {版本號}"
)引用各種Nuget包, 例:
C:\script>dotnet script
> #r "nuget: Automapper, 6.1.1"
> using AutoMapper;
> typeof(MapperConfiguration)
[AutoMapper.MapperConfiguration]
>
除此之外,EHRL中,還支援多行程式碼模式。 dotnet-script
會幫助你檢測程式碼塊是否完整,如果當你點選回車的時候,程式碼塊不完整,就會出現*
開頭的新行。
C:\script>dotnet script
> public class Foo{
* public string Name{get;set;}
* }
> var foo = new Foo();
>
執行遠端指令碼
除了執行本地指令碼,最新版本的dotnet-script
還添加了執行遠端指令碼的功能,你需要使用http/https將你的指令碼檔案暴露出來。
例:
C:\script>dotnet script https://tinyurl.com/y8cda9zt
Hello World
編譯DLL或EXE檔案
dotnet-script
還支援根據csx指令碼檔案,生成EXE或DLL檔案。
可用的引數列表如下:
引數 | 說明 |
---|---|
-o | 指定檔案生成的目錄,預設當前目錄 |
-n | 指定生成的檔名 |
-c | 指定使用的配置[Release/Debug] |
-d | 是否啟用Debug輸出 |
-r | 指定執行時 |
我們以第一個HelloWorld.csx為例
C:\script>dotnet-script publish helloworld.csx
Published C:\script\helloworld.csx (executable) to C:\script\publish\win10-x64
執行以上命令後,dotnet-script
會使用SCD(Self-contained deployments)的方式生成script.dll和script.exe及執行它所需要的所有基礎庫。
總結
dotnet-script
作為了一個global tool, 相當簡單易用, 使用它,你可以像學習Python一樣學習.NET Core,在命令列練習各種程式碼。當然開發人員也可以使用它編寫一些簡單指令碼,而不需要每次都去建立工程專案檔案。