やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

cscスクリプト(実行ファイル名をfindで取得)

 前回より、こっちのほうが素直にできた。

成果物

コード

csrun

Run() {
    . "$(cd $(dirname $0); pwd)/csrun.sh"
    BuildAndRun $@
}
Run $@

csrun.sh

# C#コードをコンパイル&実行する。
# カレントディレクトリやその子孫にある.csファイルをすべて対象にする。
CallCsc() { csc -nologo -recurse:*.cs $@; }
FindExe() { find . -name *.exe; }
CallChmod() { chmod ${2:-755} "$1"; }
RunExe() { eval "${1:-$(FindExe)}"; }
BuildAndRun() {
    CallCsc $@
    local exe_path="$(FindExe)"
    CallChmod "$exe_path"
    RunExe "$exe_path"
}

実行

C#ソースコード

  • Hello.cs
    • sub/
      • Code0.cs

Hello.cs

using System;

class Hello
{
    static void Main()
    {
        new Code0().Run();
    }
}

Code0.cs

using System;

class Code0
{
    public void Run()
    {
        Console.WriteLine("Code0");
    }
}

ビルド&実行

./csrun
Code0

 できた。

所感

 あとはcscのコマンド引数を設定してやれば色々できる。

 エントリポイントがなければ自動的にクラスライブラリを生成するようにするとかしたい。だが、コード解析など無謀。

前回まで

対象環境

$ uname -a
Linux raspberrypi 4.19.42-v7+ #1218 SMP Tue May 14 00:48:17 BST 2019 armv7l GNU/Linux