C# (Csharp) もスクリプト言語のように...

C# (Csharp) を統合開発環境(IDE?)ではなく、
テキストエディタで作成・修正する、スクリプト言語のように扱いたいので、
ソースファイルをコンパイル&実行&実行後にバイナリ削除する
スクリプトを書いてみました〜

プログラムの一部分だけの動作が見たい時に有用...カモです

2008-11-25 修正 - Linux 版で引数を処理出来ていなかった


■■■ Windows 版 ■■■
以下のバッチファイルを作成して
引数に C# のソースファイルを与えてください

※ PATH が通っているとこに、バッチファイルを置いて
ファイル(.nets とか?)に関連づけると楽かもしれません

--- dotnet-script.bat ---
@echo off

set TMPFILENAME=%~n1

set CSCVER=""
  FOR /F "tokens=1 delims= " %%i IN ('dir /A:D /B /O:N "%windir%\\Microsoft.NET\Framework" ') DO (
    set CSCVER=%%i
  )

set CMDPIDLAST=""
  FOR /F "tokens=2 delims= " %%j IN ('tasklist /FI "IMAGENAME eq cmd.exe" /FO table /NH ') DO (
    set CMDPIDLAST=%%j
  )

set RANDSIX=%RANDOM:~-10,1%%RANDOM:~-10,1%%RANDOM:~-10,1%%RANDOM:~-10,1%%RANDOM:~-10,1%%RANDOM:~-10,1%
set time2=%time: =0%
set tmpexe=%TMPFILENAME%_%date:~-10,4%%date:~-5,2%%date:~-2,2%%time2:~0,2%%time2:~3,2%%time2:~6,2%_%CMDPIDLAST%_%RANDSIX%_cs.exe


REM
REM once compile
REM

"%windir%\Microsoft.NET\Framework\%CSCVER%\csc.exe" /out:%TMP%\%tmpexe% /target:winexe %1

%TMP%\%tmpexe% %2 %3 %4 %5 %6 %7 %8 %9
del /Q %TMP%\%tmpexe%

REM pause
exit


■■■ Linux 版 ■■■
以下のシェルスクリプトを作成、実行権限を与え、
引数に C# のソースファイルを与えてください

--- dotnet-script ---
#! /bin/bash

#
# need mono-gmcs, and winforms
#
# (sudo) apt-get install mono-gmcs libmono-winforms2.0-cil
#   OR 
# (sudo) apt-get install mono-smcs libmono-winforms2.0-cil
#
#
# use
# basename, cat, chmod, date, dirname, echo, expr, pwd, rm, sed, touch,
#
#
# usage: mono-script file
#

PG_MONOCOMPILER='/usr/bin/gmcs'
     PG_MONORUN='/usr/bin/mono'
  MONO_SHELLTMP='/tmp'

  if [ ! -f "$1" ];
  then
    echo "usage: dotnet-script file"
    exit 1
  fi

BINNAME_HEAD=`basename "${1}"`
SH_DIR=`echo $(cd $(dirname $1);pwd)`
#cd "${SH_DIR}"


rndstr=`expr $RANDOM % 10000`

 INPUT_SRC="${MONO_SHELLTMP}"'/.'"${BINNAME_HEAD}"'_'`date +%Y%m%d%H%M%S`'_'"$$"'_'"${rndstr}"'.cs'
OUTPUT_BIN="${MONO_SHELLTMP}"'/.'"${BINNAME_HEAD}"'_'`date +%Y%m%d%H%M%S`'_'"$$"'_'"${rndstr}"'_cs.exe'

### debug
#echo "${OUTPUT_BIN}"
###

      touch "${INPUT_SRC}"
  chmod 600 "${INPUT_SRC}"
      touch "${OUTPUT_BIN}"
  chmod 600 "${OUTPUT_BIN}"

### cat "${BINNAME_HEAD}" | sed -e '1d' >"${INPUT_SRC}"
cp "${BINNAME_HEAD}" "${INPUT_SRC}"
chmod 600 "${INPUT_SRC}"

  if ${PG_MONOCOMPILER} -reference:System.Windows.Forms "${INPUT_SRC}" -out:"${OUTPUT_BIN}" ;
  then
    chmod 600 "${OUTPUT_BIN}"
    ${PG_MONORUN} "${OUTPUT_BIN}" "$2" "$3" "$4" "$5" "$6" "$7" "$8" "$9"
  fi

rm -rf "${INPUT_SRC}"
rm -rf "${OUTPUT_BIN}"

exit 0
------------------------