2015年8月19日水曜日

【読んだら絶対損した気分になる】 単体でC#のコードを直接実行可能なファイルを作る

Windows環境下で、なんかこう、テキストエディタでC#のコードをサクッと書いて、デスクトップ上のファイルをダブルクリックで実行できたら、ちょっとした作業が楽じゃん。みたいな?

Windows環境におけるちょっとした作業には、バッチファイル(BATファイル)とかパワーシェル(PowerShell)などの方法があるわけですが、自分的には、よくわからないから使いたくないわけです。ちょっとした作業も、書き慣れているC#で書いてしまいたい。

という中二病を拗らせた結果、下記コードが出来上がりました。

.batの拡張子を付けて保存すると、
画像をクリックで原寸表示されます。

※ Windows10の仮想デスクトップ機能、便利です。
(この注釈は本文及びGIFアニメとは関係ありません)
保存したファイルをダブルクリックするだけで、ファイルの中(21行目以降)に記載したC#のコードが実行されます。

C#のソースコードを直接実行可能にするためのコード


解説

具体的には、ファイルの中に記載したC#のコードを、ソースファイル(.csファイル)として出力し、Windowsに標準添付されている C#コンパイラ(csc.exe)を用いてコンパイルし、コンパイルされた実行ファイルを実行します。

出力されるソースファイルや実行ファイルは、実行後速やかに削除されるため、ゴミは発生しません。エコですね。(ただし、正常にコンパイル可能なC#コードが記載されている場合に限ります。)

残念なことに特殊な魔法でも何でもなく、なんてことはないBATファイルの中にC#のコードを無理やり埋め込んでいるだけです。BATファイルのコードとしてinvalidなのですが、動きます。種を明かせば、BATファイルでは、invalidな箇所についてはエラーを出力するだけという(フェールースルーな)仕様を利用しています。

ナンダカナー。

謝辞

この記事は、最近はてブで見かけた、
というJSに関する魔術的なアイデアと、Microsoft F# MVPであるいげ太さんの
という、わりとどうでもいいつぶやきにインスピレーションを受けて作成されました。

上記記事・つぶやきがこのタイミングでなければ、この記事が生まれることはなかったと思います。
この場を借りてお礼を申し上げます。

上記 ソースコードに関して

  • 21行目以降にC#のコードを書いて下さい。
  • WindowsVista以降であれば、OSのVersionを問わず動作すると思います。
    • WindowsXPでも、.NET Framework3.0以上をインストールしていれば動作すると思います。
  • C#コンパイラは、.NET Framework4.0 -> 3.5 -> 3.0の順で最初に存在するもののやつが利用されます。
  • 外部dllを参照したい場合、csc.exeの/r: オプションを使うようにbatファイルを書き換えて下さい。
  • このコードの乱用は『ダメ。ゼッタイ。』