ScriptCS:將C#轉變為腳本語言
ScriptCS 支持開發者使用簡單的文本編輯器編寫 C# 應用,并通過 Roslyn 執行編譯,使用 NuGet 進行包管理。
Windows Azure SDK 團隊的項目經理 Glenn Block 啟動了 ScriptCS 項目,它是一個嘗試將 C# 變成腳本語言的業余項目。開發者能夠利用其 C# 知識,使用簡單的文本編輯器編寫程序,并通過 Roslyn(微軟支持“編譯器即服務”的 API)完成編譯。ScriptCS 使用 NuGet 挖掘包的依賴關系并加載二進制文件。Roslyn 的r:語法用于添加 GAC 或其他 DLL 引用。
如果一個 hello.csx 文件包含下面這行 C# 代碼:
Console.WriteLine ("Hello World!");
那么運行命令“scriptcshello.csx”,會在控制臺輸出“Hello World!”字符串。
這個例子既不需要命名空間或類定義,也不需要創建項目,不會生成 .obj 或 .exe 文件。Roslyn 負責編譯而 ScriptCS 執行編譯結果。
另一個復雜一些的例子是創建一個 Web API 主機:
using System;using System.IO; usingSystem.Web.Http; usingSystem.Web.Http.SelfHost;var address = "http://localhost:8080"; varconf = new HttpSelfHostConfiguration (new Uri (address)); conf.Routes.MapHttpRoute (name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } );var server = new HttpSelfHostServer (conf); server.OpenAsync () .Wait (); Console.WriteLine ("Listening..."); Console.ReadKey ();
ScriptCS 提供了插件機制,使用了所謂的“腳本包(script packs)”,Block 解釋道:
腳本包能夠提供命名空間的導入和引用,以及腳本能夠通過 Require API 使用的對象。
腳本包的主要目的是讓開發者能夠更容易地使用框架編寫腳本。
由于腳本包可以通過 NuGet 包安裝,因此它們很容易發現和使用。
讓 ScriptCS 運行在 Mono 之上的工作正在進行, 向 Roslyn 添加調試功能也在調研之中。Sublime Text 已經創建了一個用于 ScriptCS 的插件,在簡單的編輯器中支持語法高亮。還有一種選擇,是通過 Roslyn 針對 .csx 文件在 Visual Studio 中生成語法高亮功能。
根據他在 Node.js 方面的經驗,Block 列出了將 C# 腳本化的優勢:
- 沒有項目,只有腳本——我熱愛 node.js 的原因之一在于不需要創建項目。開發者可以直接進入一個文件夾創建 js 文件,不會感到受束縛。
- 不需要 IDE,只需要一個文本編輯器。
- 在程序集之上的包——在 node 中,如果想要獲取某些內容,那么只需要使用 npm 來下載包即可。這非常簡單。開發者只需要擁有自己的應用和本地 node_modules 文件夾即可。
- 無需編譯——這是個重要因素。在 node 中,開發者只需要運行 node.exe 和自己的程序就能讓它運轉。開發者無須首先創建可執行文件,只需要直接運行。
借助 Roslyn 和 NuGet,這一切成為了可能。ScriptCS 仍然是處理程序集,但是“不必單獨管理它們,只需要安裝包即可。”
ScriptCS 采用 Apache 2許可,它目前并未獲取微軟的支持。