コマンドラインで C# をコンパイルしよう

ドキュメント制作用のマシンだったり、サーバーマシンだったり、他人のマシンだったりすると、Visual Studio が入っていないどころではなくて、Perl やら Ruby やらのスクリプト言語も入っていないので、バッチ処理をするときに大変なのです。

で、意外と【素】な環境で使えるプログラム言語を挙げてみると、wscript が一番なのですが、プログラミングっていう点では弱いんですよね。特に入出力関係を CreateObject で作らないといけないので、ちと面倒くさい。

なので、C# や Visual Basic を使います。と言いますか、この手のコンパイル系の言語が OS と共に入っているのは、なんだかなぁと思うのですが、それは別として使えます。
# セキュリティ的に、業務マシンには余分なものを入れないとう制限があるので。

C:\WINDOWS\Microsoft.NET\Framework なフォルダを見ると .NET Framework が入っています。

2011/02/15  10:08    <DIR>          v1.0.3705
2011/02/10  16:56    <DIR>          v1.1.4322
2011/02/15  12:54    <DIR>          v2.0.50727

この中に

 csc.exe C# のコンパイラ
 vbc.exe Visual Basic のコンパイラ
 jsc.exe Javascript.NET のコンパイラ
 
があります。

Java の場合はランタイムしか入らないので javac.exe を入れるためには JDK をインストールする必要があるのですが、.NET Framework は、【Windows Update】をしちゃうと入ってしまいます。ついでに言えば、MSBuild.exe も入っています。

なので、

SET PATH=%PATH%;C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727

な風にパスを通しておけば、Hello.cs なんかがコンパイルできます。

using System;

pubic class Hello 
{
  public static void Main(string[] args) {
    Console.WriteLine("Hello 秘密な C# World.");
  }
}

このコマンドライン版で何を作るかというと、クラス設計のモックアップを作っています。クラス図を作っても、それが実際に動くかどうかわからないし、それを動かしたときにはどのようにクラスが関係するのかがわかりづらいので、スケルトンなモデルを作ります。これをコンパイルして、Console.WriteLine でトレース結果を出せば、どのメソッドをどのように呼び出しているのかを試すことができます。また、その結果をクラス図のほうに反映させることもできます。

まぁ、実は【シーケンス図】を書けばいいだけなんですけどね。リフレクションを使ったデータコンバーターを作る予定もあって、C# でモデルを作っているところなのです。

カテゴリー: 開発 パーマリンク