Visual Studio で作成したセットアッププロジェクトで CI するためのコマンド

この記事は C# Advent Calendar 2011 21日目として書かれました。

前日は id:ZOETROPE さんで Reactive Extensionsでセンサプログラミング でした。



今年になって C# で真面目にプログラムを書き始めたのですが、C# でも CI したいですよね。
そこで、今まで Ubuntu でだけ使っていた JenkinsベースのCI環境を、Windows 上にも構築しました。

Java なら、最後に war とか jar とかを成果物にすればいいんですが、Windows プログラムならインストーラを作成して配布したい。
と思ってやってみると意外にはまりました。

サンプルアプリ

サンプルとしてクリックするとリア充を呪うアプリを作りました。

https://github.com/suer/Test-Setup-Project

セットアッププロジェクトを作成

ソリューション右クリックの追加>新規プロジェクトの追加からセットアッププロジェクトを作成します。

セットアッププロジェクトのファイルシステムエディタで
アプリケーションフォルダ>追加>プロジェクト出力
を選択し、Testプロジェクトの成果物をインストーラに含めます。


MSBuild.exe でビルドしてみる

CI したいのでコマンドラインでビルドできなきゃいけません。
通常通りMSBuild でビルドしてみます。*1


$ MSBuild

あらら。ワーニングが表示されました。
TestInstallerプロジェクトの中を見てみるとたしかにインストーラが生成されていません。

どうするか

devenv.com を使用します。

以下のようにコマンドを叩きます。


$ devenv.com Test.sln /project TestInstaller\TestInstaller.vdproj /build Release

今度は成功しました。

あとは、Jenkins のビルドで、上記コマンドが発行されるようにして、生成される成果物を保存対象にすればいつでも最新のインストーラが手に入ります。

まとめ

  • MSBuild コマンドではインストーラプロジェクトをビルドできない。devenv.com コマンドを使用する。
  • 隣の人「これ、、、C# の話じゃないけど、、、」
  • セットアッププロジェクトの作成方法は以下を参考にしました

はじめてのVisual Studio 2010 (TECHNICAL MASTER 62)

あわせて読みたい

Jenkins Advent Calendar jp 2011


明日は @yone64 さんです。
よろしくお願いします。

*1:パスが通った状態でコマンドを発行しています。パスが通っていない場合は、パスを通すか、絶対パスでコマンドを指定してください。