やってみる

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

C#ツアー はじめに cscでコンパイルする

 チュートリアルよりこっちを先にやるべきだったのでは?

成果物

情報源

概要

 cscコマンドでC#コードを実行する。

1. 速攻

ソースコード作成

0.sh

code=$(cat << 'EOS'
using System;

class Hello
{
    static void Main()
    {
        Console.WriteLine("Hello, World");
    }
}
EOS
)
echo "$code" > Hello.cs

コンパイルする

csc Hello.cs

実行する

chmod 755 Hello.exe
./Hello.exe

結果

Hello, World

2. クラス名を受け取れるようにする

 ソースコード作成。

1.sh

class_name=Hello
code=$(cat << EOS
using System;

class $class_name
{
    static void Main()
    {
        Console.WriteLine("Hello, World");
    }
}
EOS
)
echo "$code" > "$class_name.cs"

 ビルド。

csc $class_name.cs

 実行。

chmod 755 $class_name.exe
./$class_name.exe

最終スクリプト

4.sh

# C# HelloWorld
#   1. ソースコードを生成する
#   2. ビルドする
#   3. 実行する
Define() {
    class_name=${1:-Hello}
    CreateSourceCodeFile() {
        code=$(cat <<- EOS
          using System;

          class $class_name
          {
              static void Main()
              {
                  Console.WriteLine("Hello, World");
              }
          }
     EOS
       )
        echo "$code" > "$class_name.cs"
    }
    Build() { csc $class_name.cs; }
    Chmod() { chmod 755 $class_name.exe; }
    Execute() { ./$class_name.exe; }
}
Runable() {
    CreateSourceCodeFile 
    Build
    Chmod
    Execute
}
Run() {
    Define "$@"
    Runable
}
Run "$@"

 以下、実行例。第1引数にクラス名を指定できる。省略されたらHello

4.sh        # Hello.cs, Hello.exe
4.sh AAAAA  # AAAAA.cs, AAAAA.exe

nullableビルドオプション

csc $class_name.cs /nullable:enable /langversion:8

所感

 dotnet runは60秒くらいかかるのに、cscなら5秒くらい。圧倒的高速!

 ちょっと試したいときはcscのほうが良さそう。

対象環境

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