Knowlbo 開発者ブログ

株式会社Knowlboの開発者ブログです。

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

f:id:knowlbodev:20170117181103p:plain

使いどころ

現在のところ Visual Studio に付属しているプログラムなので本番環境で利用することは難しいと思いますが、開発時にちょっとした確認が手軽にできるのは良いですね。 (「この数字、16進数だと何だっけ?」とか・・・ありますよね)

> 123.ToString("X")
"7B"

more

今回は csi.exe の本当にシンプルな使い方を試してみました。より深く知るにはこちらのページなどが足がかりになりそうです。

Essential .NET - C# スクリプト