利用lprun.exe把.linq當command-line的執行檔

利用lprun.exe把.linq當command-line的執行檔

以前一般情況下會介紹LINQPad是因為要寫LINQ,但現在LINQPad已經是除了Visual Studio寫測試程式第二選擇。但有個問題,這支測試程式剛好就是一個command-line(命令提示字元)的專案程式,那麼可不可以直接執行寫好的*.linq檔案,而不是「開Visual Studio,開新專案,"Copy & Paste",compiler ...」。這需求lprun聽到了。

lprun.exe使用簡介

lprun.exe使用方式很簡單,只需要把你寫好的*.linq指定給他,它會動態幫你編譯並執行。

LINQPadRunner

LINQPadRunner以前是個github專案,後來被LINQPad作者直接包進安裝檔之中,如果你的LINQPad一直是採用Update方式,可能會沒有lprun.exe,只需要重新安全最新安裝檔或獨立執行檔,其中都已經包含lprun.exe執行檔。

lprun.exe使用範例

首先來個Hello world:

   void Main()
   {
    Console.WriteLine ("Hello world, LINQ run-time.");
   }
  

將*.linq儲存,利用lprun.exe來執行:

lprun execute linq file

可以將輸出結果輸出至檔案:

lprun output format

格式可指定為text | html | htmlfrag | csv | csvi。如果你在想程式碼中進行類似行為,LINQPad本身提供Util類別,裡面提供新的Util.ToCsvString()Util.ToHtmlString()讓開發人員直接呼叫使用。另外還有兩個方法,Util.WriteCsv()提供有效率寫入CSV格式到檔案或TextWriter之中。Util.CreateXhtmlWriter()提供寫到HTML內容至檔案。

LINQ Util Class

lprun.exe也可以執行純文字檔,只需要在執行時指定-lang參數,-lang是指定執行的語言,合法選項有:Expression, Statements, Program, VBExpression, VBStatements, VBProgram, FSharpExpression, FSharpProgram, SQL, ESQL

我們有一純文字檔add.txt,裡面只有12+12這樣文字內容:

lprun execute text

指定expression方式執行,這在某些情境下會非常有用,例如,執行T-SQL語法。執行T-SQL語法你必須先與資料庫連結,這可以透過-cxname參數來指定,假設在純文字檔有以下內容:

   db.Product.Take(10)
  

呼叫方法:lprun -lang=e -cxname=Northwind GetProductTop10.txt,連結資訊儲存在%appdata%\LINQPad\ConnectionsV2.xml(也就是我們在LINQPad裡使用Add connection時儲存的地方)。此組態檔可以複製與移動至與LINQPad.exe相同路徑下,LINQPad.exe會優先採用同路徑下的組態檔。

另外一個小技巧,當儲存的*.linq很多時,你可以在LINQPad.exe所在目錄建立一個queries目錄,那麼LINQPad GUI程式會自動呈示*.linq在My Queries。

如果要加入命名空間,使用using,加入參考組件使用refref必須在using之前

   ref System.Windows.Forms.dll;
   ref System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a;

   using System.Windows.Forms;
   using System.Drawing;
    
   new Label().Anchor
  

lprun.exe也可以執行含NuGet組件的程式碼,指定如ref nuget:Rx-Main;

   ref nuget:Rx-Main;
   using System.Reactive.Linq;
      
   Observable.Range(1,10)   
  
lprun execute include nuget dll

如果LINQPad的暫存檔沒有此NuGet組件,第一次會進行下載作業,第二次就直接載入執行。暫存檔路徑:「C:\Users\{UserName}\AppData\Local\LINQPad\NuGet」,讀者也可以透過LINQPad GUI進行NuGet組件管理。

如果需要傳遞參數,那麼要修改一下LINQPad的Main的string[] args參數:

   void Main(string[] args)
   {
    args.Dump();
   }   
  
lprun passing arguments

以上是一些簡單的應用,更詳細的說明請參考lprun的使用說明

沒有留言:

張貼留言

感謝您的留言,如果我的文章你喜歡或對你有幫助,按個「讚」或「分享」它,我會很高興的。