C# REPL とスクリプト
開発部の本橋です。
Visual Studio 2015 Update 1 より csi.exe
なるものが付いてくるようになりました。これは C# の REPL であり、スクリプトインタープリターのようです。ちょっと使ってみました。
REPL
スタートメニューより 開発者コマンドプロンプト for VS2015
を実行すると csi.exe
のあるフォルダにパスが通っています。私の環境では以下の場所にありました。
> where csi C:\Program Files (x86)\MSBuild\14.0\Bin\csi.exe
csi.exe
を実行するとインタープリターと対話できます。
> csi Microsoft (R) Visual C# インタラクティブ コンパイラ バージョン 1.2.0.60317 Copyright (C) Microsoft Corporation. All rights reserved. 詳細については、「#help」と入力します。 >
ここからはいつも通り C# のコードが書けます。関数や try
ステートメントもいけますね。
> private int AddOne(int i) . { . return i + 1; . } > AddOne(5) 6 > > try { . throw new Exception("an error"); . } . catch (Exception ex) { . Console.WriteLine(ex.Message); . Console.WriteLine("--------------------"); . Console.WriteLine(ex.StackTrace); . } an error -------------------- 場所 Submission#12.<<Initialize>>d__0.MoveNext() >
スクリプト
C# スクリプトは拡張子 .csx
とします。まずは簡単なファイルを用意します。
// test1.csx using System; private DateTime AddOneHour(DateTime dt) { return dt.AddHours(1); } Console.WriteLine("Hello csi."); Console.WriteLine("--------------------"); Console.WriteLine(AddOneHour(DateTime.Now))
スクリプトの実行は csi.exe
にファイル名を渡してあげます。
> csi test1.csx Hello csi. -------------------- 2017/01/17 19:04:48
クラス定義や MessageBox
もいけますね。
// test2.csx // アセンブリの参照は #r で始める #r "System.Windows.Forms" using System; using System.Windows.Forms; // メッセージボックスもいける MessageBox.Show("Hello csi."); // クラスもいける public class MyClass { public DateTime AddOneDay(DateTime dt) { return dt.AddDays(1); } } MyClass myClass = new MyClass(); Console.WriteLine(myClass.AddOneDay(DateTime.Now));
> csi test2.csx 2017/01/18 18:08:44
使いどころ
現在のところ Visual Studio に付属しているプログラムなので本番環境で利用することは難しいと思いますが、開発時にちょっとした確認が手軽にできるのは良いですね。 (「この数字、16進数だと何だっけ?」とか・・・ありますよね)
> 123.ToString("X") "7B"
more
今回は csi.exe
の本当にシンプルな使い方を試してみました。より深く知るにはこちらのページなどが足がかりになりそうです。