|
.NET TIPS プログラムからソース・コードをコンパイルするには?デジタルアドバンテージ2003/12/19 |
![]() |
|
|
|
.NET Frameworkのクラス・ライブラリには、プログラムの実行時にソース・コードをコンパイルしてアセンブリを作成する機能が用意されている。例えば、ASP.NETはWebページがアクセスされたときにaspxファイルをC#やVisual Basic .NET(以下VB.NET)のソース・コードへ変換し、さらにそれをコンパイルして実行しているが、ソース・コードのコンパイル時にはこの機能を利用している。
C#のソース・コードをコンパイル
次のサンプル・プログラムは、プログラム中に文字列として埋め込んだC#のソース・コードを「cshello.exe」という実行ファイルへコンパイルする。実行すればカレント・ディレクトリにcshello.exeが作成されるはずだ。
|
|
| C#のソース・コードをコンパイルするC#のサンプル・プログラム(cscompile.cs) | |
C#のソース・コードをプログラム内でコンパイルするには、まずCSharpCodeProviderクラス(Microsoft.CSharp名前空間)のインスタンスを作成し、CreateCompilerメソッドを呼び出してコンパイルを実際に実行するICodeCompilerインターフェイス(System.CodeDom.Compiler名前空間)を実装したオブジェクトを取得する。このオブジェクトは実際にはCSharpCodeGeneratorクラスのオブジェクトであるが、インターフェイスを経由して参照することにより、それ以降のコードで特定のコンパイラによらないコーディングができるようになる(すぐ後でVB.NETのコードを埋め込んだ場合の例を示す)。
CSharpCodeProvider cscp = new CSharpCodeProvider();
ICodeCompiler cc = cscp.CreateCompiler();
次にコンパイル時に必要なパラメータをCompilerParametersクラス(System.CodeDom.Compiler名前空間)により作成する。ここでは、コンパイルにより作成されるファイルの名前をOutputAssemblyプロパティで指定し、また、出力されるファイルが実行可能ファイル(.exeファイル)となるようにGenerateExecutableプロパティをtrueに指定している(デフォルトでは.dllファイルが作成される)。
CompilerParameters param = new CompilerParameters();
param.OutputAssembly = "cshello.exe";
param.GenerateExecutable = true;
最後にCompileAssemblyFromSourceメソッドを呼び出せば、実際にコンパイルが実行され、ファイルが出力される。
cc.CompileAssemblyFromSource(param, code);
ここでは省略したが、このメソッドはコンパイル結果としてCompilerResultsクラス(System.CodeDom.Compiler名前空間)のオブジェクトを返す。埋め込んだソース・コードに誤りがある場合には、このオブジェクトのプロパティによりコンパイル・エラーを知ることができる。
Visual Basic .NETのソース・コードをコンパイル
同様に、次のサンプル・プログラムは、プログラム中に文字列として埋め込んだVB.NETのソース・コードをコンパイルして実行可能ファイルを出力する。
|
|
| VB.NETのソース・コードをコンパイルするC#のサンプル・プログラム(vbcompile.cs) | |
ソース・コードがVB.NETの場合には、CSharpCodeProviderクラスの代わりに、VBCodeProviderクラス(Microsoft.VisualBasic名前空間)を使用する。
なお、ここで解説したコンパイルを行うクラスでは、コンパイル時にコマンドライン版のコンパイラ(csc.exeやvbc.exe)を呼び出しているようで、それらが正しくインストールされていなければ、コンパイラが見つからないというエラーが発生する。![]()
| カテゴリ:クラス・ライブラリ 処理対象:コンパイラ 使用ライブラリ:CSharpCodeProviderクラス(Microsoft.CSharp名前空間) 使用ライブラリ:ICodeCompilerインターフェイス(System.CodeDom.Compiler名前空間) 使用ライブラリ:CompilerParametersクラス(System.CodeDom.Compiler名前空間) 使用ライブラリ:CompilerResultsクラス(System.CodeDom.Compiler名前空間) 使用ライブラリ:VBCodeProviderクラス(Microsoft.VisualBasic名前空間) |
|
||||||||||||||||||||||||||||
| 「.NET TIPS」 |
TechTargetジャパン
- 新人プログラマーのためのInsider.NETの歩き方 2012 (2012/5/22)
晴れて.NETプログラマーとなる新人が効率的に開発技術を習得するには? 大量にある記事群の中から新人が読むべきお勧めを厳選して紹介 - jQuery MobileでJavaScriptプログラミング (2012/5/17)
jQuery Mobileは手軽なだけでなく、JavaScriptのAPIも充実しており、独自機能の実装もできる。今回は「グローバル設定」と「イベント」を解説 - Windows上で開発するための開発環境構築入門 (2012/5/16)
Windowsを使ってチームで開発している? なのにサーバOSを設定・運用した経験がない? そうなら、今すぐ学ぼう - 「コントラクト」でアプリのサンドボックスを乗り越える! (2012/5/11)
Metroスタイル・アプリはサンドボックスの中で動作する。それを乗り越えてほかのアプリと連携する仕組み「コントラクト」を解説
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -


