.NET TIPS

ビルドの前後でカスタム処理を実行するには?(応用編)

デジタルアドバンテージ 一色 政彦
2005/09/23

 「TIPS:ビルドの前後でカスタム処理を実行するには?(Visual C# .NET編)」では、Visual Studio .NET(以降、VS.NET)でプログラムを開発する場合に、そのプログラムが実際に生成・更新されるビルド・プロセスの前後で、何らかのカスタム処理を行う方法(ビルド・イベント機能を活用する方法)を紹介した。しかしこの方法には、VS.NET 2003のC#(以下、Visual C# .NET 2003)でしか利用できないという欠点がある。

 それではVisual C# .NET 2002やVisual Basic .NET 2002/2003(以下では、これらすべてをまとめて「VB.NET」と表現する)で、このようなビルド・イベント機能の活用した「ビルド前後のカスタム処理の実行」は実現できないのだろうか。実は、ビルド・イベント機能はVisual C++ .NET 2002/2003にも搭載されており、これを利用することでVB.NETからも実現が可能だ。

 具体的には、(VB.NETプロジェクトが含まれる)ソリューションに対してVisual C++ .NETプロジェクトを追加し、そのビルド・イベント機能を利用する。つまり、VB.NETプロジェクトをビルドする前あるいは後で、このVisual C++ .NETプロジェクトがビルドされるように指定し、そこでVisual C++ .NETプロジェクトのビルド・イベントが実行されるように設定するわけである。

 その具体的な手順を以下で説明していこう。なお本稿では、開発環境としてVisual C++ .NETを含めてVS.NETがインストールされていることを前提とする。

1. ソリューションへのVisual C++ .NETプロジェクトの追加

 まずはビルド・イベント機能を実行するVisual C++ .NETの新規プロジェクトをソリューションに追加しよう。ビルド・イベントには「ビルド前のイベント」と「ビルド後のイベント」の2種類があるので、ここではビルド前のイベントを実現するための「PreBuildEvent」プロジェクトと、ビルド後のイベントを実現するための「PostBuildEvent」プロジェクトの2つを新規作成してソリューションに追加しよう。

 次の画面は、実際に「PreBuildEvent」という新規プロジェクトをソリューションに追加しているところである。

ソリューションへのVisual C++ .NETプロジェクトの追加
「PreBuilEvent」プロジェクトを新たに作成してソリューションに追加しているところ。
  VS.NET IDEの[ソリューション エクスプローラ]にあるソリューション項目を右クリックして、そこで表示されるコンテキスト・メニューから[追加]−[新しいプロジェクト]を選択する。これにより[新しいプロジェクトの追加]ダイアログが表示される。
  [新しいプロジェクトの追加]ダイアログの[プロジェクトの種類]のツリーから[Visual C++ プロジェクト]を選択する。
  [テンプレート]一覧の中から[メイクファイル プロジェクト]を選択する(詳細後述)。
  [プロジェクト名]の欄にVisual C++ .NETプロジェクトの名前(本稿の例では「PreBuildEvent」もしくは「PostBuildEvent」)を指定する。
  [OK]ボタンをクリックすると、[メイクファイル アプリケーション ウィザード]ダイアログが表示される。
  [メイクファイル アプリケーション ウィザード]ダイアログでは、特に何も設定変更する必要はない。そのまま[完了]ボタンをクリックして、プロジェクトの作成を完了させる。
  [ソリューション エクスプローラ]には、ここで作成した新規プロジェクト(本稿の例では「PreBuildEvent」もしくは「PostBuildEvent」)が表示される。そのプロジェクト内には「ソース ファイル」「ヘッダー ファイル」「リソース ファイル」という3つのフォルダが自動生成されるが、これらは使用しないので削除して構わない。
  同様の手順で「PostBuildEvent」プロジェクトも追加する。

 新規Visual C++ .NETプロジェクトの追加作業で注意してほしいのは、プロジェクトのテンプレートとして「メイクファイル・プロジェクト」を選択するところである。

 本稿で解説する方法では、実際には「ユーティリティ・プロジェクト」のビルド・イベント機能を利用する(詳細後述)。しかし、そのユーティリティ・プロジェクトのプロジェクト・テンプレートは用意されていないので、ここでは一時的に(不要なファイルがあまり生成されない)「メイクファイル・プロジェクト」をプロジェクト・テンプレートとして選択している。

2. Visual C++ .NETプロジェクトがビルドされるタイミングの指定

 「PreBuildEvent」プロジェクトと「PostBuildEvent」プロジェクトをソリューションへ追加し終わったら、次にそれらのプロジェクトに含まれるビルド・イベント機能が、VB.NETプロジェクトのビルド・プロセスの前後で実行されるようにしよう。具体的にはプロジェクトのビルド順序を指定する。このビルド順序の指定を行うには、それぞれのプロジェクト間に依存関係を設定すればよい。

 それを実際に行っているのが次の画面だ。この画面では、VB.NETプロジェクトと、(その前にビルドされるべき)「PreBuildEvent」プロジェクト、(その後にビルドされるべき)「PostBuildEvent」プロジェクトという3つのプロジェクト間の依存関係を設定して、それぞれのプロジェクトがビルドされる順番を指定している。

Visual C++ .NETプロジェクトがビルドされるタイミングの指定
VB.NETプロジェクトと、(その前にビルドされるべき)「PreBuildEvent」プロジェクト、(その後にビルドされるべき)「PostBuildEvent」プロジェクトという3つのプロジェクト間の依存関係を設定して、それぞれのプロジェクトがビルドされる順番を指定しているところ。
  [ソリューション エクスプローラ]でプロジェクト項目(この画面の例では「WindowsApplication2」)を右クリックして、そこで表示されるコンテキスト・メニューから[プロジェクト依存関係]を選択する。これにより[プロジェクトの依存関係]ダイアログが表示される。
  [プロジェクトの依存関係]ダイアログの[依存関係]タブを開いたまま、[プロジェクト]としてVB.NETプロジェクト(本稿の例では「WindowsApplication2」)を選択する。
  [依存先]一覧で「PreBuildEvent」にチェックを入れる。これにより、VB.NETプロジェクト(WindowsApplication2プロジェクト)がビルドされる前に、必ずPreBuildEventプロジェクトがビルドされるようになる。
  [プロジェクト]をVB.NETプロジェクトから「PostBuildEvent」プロジェクトに切り替える。
  [依存先]一覧でVB.NETプロジェクト(「WindowsApplication2」)にチェックを入れる。これにより、PostBuildEventプロジェクトがビルドされる前に、必ずVB.NETプロジェクト(WindowsApplication2プロジェクト)がビルドされるようになる。
  [OK]ボタンをクリックすると、プロジェクトの依存関係が確定する。

 上の画面におけるプロジェクト間の依存関係の設定では、

(1) PreBuildEventプロジェクト
(2) VB.NETプロジェクト(WindowsApplication2プロジェクト)
(3) PostBuildEventプロジェクト

の順番でプロジェクトがビルドされるように指定したことになる。

3. ビルド・イベントで実行するカスタム処理の設定

 後は実際にビルド・イベント(具体的には「ビルド前のイベント」と「ビルド後のイベント」)で実行するカスタム処理を設定するだけだ。

 ビルド・イベントの設定は、現在の「メイクファイル」というプロジェクト・タイプでは行うことができない。そこで(新規プロジェクトの追加のところで述べたように)、プロジェクト・タイプを「メイクファイル」から「ユーティリティ」に変更する必要がある。

 プロジェクトをユーティリティ・プロジェクトに変更することで、前掲の「TIPS:ビルドの前後でカスタム処理を実行するには?(Visual C# .NET編)」と同じように、ビルド イベントとしてビルド前のイベントやビルド後のイベントのコマンドラインを設定できるようになる。

 これを実際に行っているのが次の画面である。

ビルド・イベントで実行するカスタム処理の設定
ビルド・プロセスの前後で、何らかのカスタム処理を行いたい場合には、プロジェクト・タイプをユーティリティ・プロジェクトに変更したうえで、ビルド・イベントで実行するカスタム処理(コマンドライン)を設定すればよい。
  [ソリューション エクスプローラ]で「PreBuildEvent」プロジェクトもしくは「PostBuildEvent」プロジェクトを右クリックしてコンテキスト・メニューを表示し、そのメニューから[プロパティ]を選択する。これにより、[<プロジェクト名> プロパティ ページ]ダイアログ(この例では「PostBuildEvent プロパティ ページ」)が表示される。
  [<プロジェクト名> プロパティ ページ]ダイアログの左側のツリーから[構成プロパティ]−[全般]を選択する。
  [構成の種類]として[ユーティリティ]を選択する。
  [適用]ボタンをクリックすると、プロジェクト・タイプが「ユーティリティ・プロジェクト」に変更される。そして左側のツリーに[ビルド イベント]に関する項目(具体的には「ビルド前のイベント」と「ビルド後のイベント」)が表示される。
  左側のツリーから[構成プロパティ]−[ビルド イベント]−[ビルド後のイベント]を選択する(PostBuildEventの場合。PreBuildEventでは[ビルド前のイベント]を選択すること)。
  [コマンド ライン]の欄に、ビルド前に実行したいカスタム処理をコマンドラインで入力する。このコマンドラインの入力には、前掲のTIPSで紹介した入力支援エディタを利用できる(ただしマクロは、実際のVB.NETプロジェクトの内容ではなく、PostBuildEventプロジェクトやPostBuildEventプロジェクトの内容が使われることに注意すること)。なお本稿では、PostBuildEventプロジェクトのビルド後のイベントのコマンドラインとして「Copy "$(SolutionDir)WindowsApplication2\bin\WindowsApplication2.exe" "C:\copied\copy.exe"」を、PreBuildEventプロジェクトのビルド前のイベントのコマンドラインとして「Del "C:\copied\copy.exe"」を設定した。
  [OK]ボタンをクリックすると、ビルド・イベントでのカスタム処理の設定が保存される。

4. ビルド・イベントの実行

 後はソリューション全体を実際にビルドすると、VB.NETプロジェクトのビルドの前後に、カスタム処理が実行される。次の画面は、VS.NETで本稿のソリューション全体をビルドした際の出力結果の例だ。

ビルド・イベント機能の実行結果
この出力結果を見ると、最初のPreBuildEventプロジェクトのビルドで「ビルド前のイベント」が、最後のPostBuildEventプロジェクトのビルドで「ビルド後のイベント」が、それぞれ正しく実行されているのを確認できる。

 この出力結果を見ると、正しくPreBuildEventプロジェクト→VB.NETプロジェクト(WindowsApplication2プロジェクト)→PostBuildEventプロジェクトの順番でビルドされたことが分かる。

 さらにPreBuildEventプロジェクトのビルドでは、正しくビルド前のイベントが実行され(この画面の例では「C:\copied\copy.exe が見つかりませんでした。」というエラー・メッセージが表示されている)、PostBuildEventプロジェクトのビルドでは、正しくビルド後のイベントが実行されているのを確認できる(この画面の例では「1 個のファイルをコピーしました。」というメッセージが表示されている)。End of Article

カテゴリ:開発環境&ツール 処理対象:ビルド
関連TIPS:ビルドの前後でカスタム処理を実行するには?(Visual C# .NET編)
 
この記事と関連性の高い別の.NET TIPS
ビルドの前後でカスタム処理を実行するには?(Visual C# .NET編)
VB開発者設定で「Debug」や「Release」などのソリューション構成を有効にするには?
VS.NET 2003プロジェクトをVS.NET 2002で開くには?
プロジェクト名やソリューション名を変更するには?
スタート・ページでプロジェクト一覧の項目を削除するには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間