Boost」など、さまざまなカンファレンスを企画・運営しています。BOOKS(コードジン・ブックス)は、CodeZineの連載からカットアップした、開発現場の課題解決に役立つ書籍シリーズです。MB)本稿では、.NET用のビルドツールNAntを利用する際に、アセンブリのファイルバージョンのアップデートを自動で行う方法を紹介します。これにより、手動によるビルドバージョン変更の手間がなくなり、ビルドが何度行われているかを正確に把握することができます。AssemblyInfoファイルの情報を設定するattribタスクasminfoタスク実行結果まとめ参考資料はじめにNAntとはAnt(Javaのビルドツール)の.NET版ツールです。さまざまなタスクやファンクションが用意され、開発時の作業自動化や、作業の負荷軽減が可能になる便利なツールです(2006/10/11時点の最新バージョンは0.85rc4)。NAntに関する詳細は、別稿「NAntを活用して開発時の作業を自動化する」も併せて参照してください。本稿ではこのNAntを利用して、ビルド作業のたびにアセンブリのファイルバージョンのアップデートを自動で行う方法を紹介します。これによって、手動によるビルドバージョン変更の手間がなくなり、ビルドが何度行われているかを正確に把握することができます。バージョン保持ファイルに前回のバージョンを保存しておき、それをNAntで更新することによって、アセンブリのファイルバージョンの4桁目(例:1.0.0.0の0部分)を、ビルドのたびにインクリメントすることができます。バージョン保持ファイルの更新処理はNAntスクリプト中にC#で記述します。NAntスクリプト中にC#のソースを記述するためのサンプルとしても利用できます。Studio.NETの開発者の方。コンパイル/ビルド作業、インストーラ作成作業の自動化に興味がある開発者の方。必要な環境このサンプルは、以下の環境で動作確認を行っています。Page」よりダウンロードしてください。2.0)で作成されたソリューションおよびプロジェクトについて、solutionタスクがサポートされていないので注意してください。サンプルファイルの使用方法サンプルファイル「NAntSample_VCSharp.zip」には以下のものが含まれています。NAnt本体(バージョン0.85-rc4)NAntソースファイルNAnt初期設定用バッチファイルNAnt起動用バッチファイルNAntサンプルスクリプトサンプルファイルを使う前に、以下の作業を行ってください。ダウンロードファイルを「C:\」に解凍してください(配置先は「C:\NAntSample_VCSharp」)。初回実行時、バージョン保持ファイル出力先ディレクトリを作成するために、「NAntInit.bat」をダブルクリックして実行してください。NAntを実行するため、「NAntExecute.bat」をダブルクリックしてください。NAntExecute.bat起動時に、NAnt.exeのパスが環境変数に設定されます。サンプルスクリプトの概要サンプルスクリプトの処理の流れを、下図で把握しておきましょう。処理の流れサンプルスクリプトは、5つの「設定」および「ターゲット」で構成されています。プロジェクト設定・プロパティ設定mainターゲットargsターゲットupdateversionターゲットgenasminfoターゲットこれらの「設定」および「ターゲット」について、以下ひとつずつ解説していきます。プロジェクト設定・プロパティ設定ここでは、スクリプト内で利用する値をプロパティとして設定しておきます。何度も利用する値などを、まとめて設定しておくと便利です。/>各プロパティの意味は、次のとおりです。このプロジェクトの名前。ここでは「Project1」という名前に設定。ソース配置先のディレクトリ。ここでのディレクトリの構成は下図「ソース配置先のディレクトリ構成」のとおり。今回は「C:\NAntSample_VCSharp\Build」に設定。バージョン保持ファイルの保存先。今回は「C:\NAntSample_VCSharp\Build\Version」に「Project1」という名前のバージョン保持ファイルが作成される。今回は、サンプルファイルを解凍すると、project.srcプロパティで指定した場所にソースが配置されています。Safe)などからソースを自動で取得するのが便利です。NAntContribのVSS関連タスクやCruiseControl.NET、Draco.NETを利用し、ソースを自動取得するのがよいでしょう。メイン処理mainターゲットは、ビルドのメイン処理を行うターゲットです。mainターゲットに依存しているargsターゲットが実行されます。これにより、product.verプロパティとsolution.long.verプロパティに値が設定されます。次に、version.fileが存在する場合にupdateversionターゲットが実行されます。バージョン保持ファイルが作成または更新されます。バージョン保持ファイル内の値を基に、「AssemblyInfo.cs」ファイルにアセンブリの属性値が設定されます。その後、「AssemblyInfo.cs」ファイルの情報を基に、solutionタスクを利用してビルドを行います。対象とするアセンブリファイルを指定。「genasminfo」ターゲットを実行。</target>ここで使用されているNAntのタスクとファンクションは以下の4つです。ifタスクcallタスクproperty::existsファンクションsolutionタスクこれらについて、以下に記します。ifタスクifタスクは、ターゲットやプロパティが存在するか、プロパティ値の判定を行います。testプロパティ値を判定するのに利用される。タスク実行中にエラーが発生した場合、ビルドプロセスを中止させるかどうかを設定。デフォルト値はtrue。値がtrueならば、タスクは実行される。falseならば、タスクはスキップされる。デフォルト値はtrue。値がfalseならば、タスクは実行される。trueならば、タスクはスキップされる。デフォルト値はfalse。詳細なログを出力するかどうかを設定。デフォルト値はfalse。通常、test属性とfailonerror属性を指定することが多いです。callタスクcallタスクは、スクリプト内のターゲットを呼び出し、実行するタスクです。呼び出したいターゲットの名前。指定されたターゲットについて、既にそのターゲットが実行済であっても実行するかどうかを設定。デフォルト値はtrue。タスク実行中にエラーが発生した場合、ビルドプロセスを中止させるかどうかを設定。デフォルト値はtrue。値がtrueならば、タスクは実行される。falseならば、タスクはスキップされる。デフォルト値はtrue。値がfalseならば、タスクは実行される。trueならば、タスクはスキップされる。デフォルト値はfalse。詳細なログを出力するかどうかを設定。デフォルト値はfalse。通常、target属性だけを指定することが多いです。ファンクションproperty::existsファンクションは、プロパティが存在するかを判定するために使用します。引数で指定したプロパティが存在している場合。true引数で指定したプロパティが存在しない場合。.NET)のソリューションおよびプロジェクトをコンパイルします。デバッグモード(pdbファイルも一緒に出力)でビルドする場合は、「debug」を指定。リリースモードでビルドする場合は、「release」を指定。Studio.NETで設定している参照のパスなどを有効にするかどうか。デフォルト値はtrue。ソリューションおよびプロジェクトをコンパイルした際の、ファイルの出力先。Studio.NETのソリューションファイル(slnファイル)を設定。タスク実行中にエラーが発生した場合、ビルドプロセスを中止させるかどうかを設定。デフォルト値はtrue。値がtrueならば、タスクは実行される。falseならば、タスクはスキップされる。デフォルト値はtrue。値がfalseならば、タスクは実行される。trueならば、タスクはスキップされる。デフォルト値はfalse。詳細なログを出力するかどうかを設定。デフォルト値はfalse。2.0に対しては、solutionタスクがサポートされていません。Studio.NETで設定している参照設定のパスは無効になります。この場合、参照設定のパスをassemblyfoldersを用いて指定します。NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Technologies。執筆コミュニティ「WINGSプロジェクト」代表。