MSBuild で ClickOnce アプリケーションを発行する

せっかく CruiseControl.NET で自動ビルドを構築しているんだから、ClickOnce アプリケーションの発行も自動化できないか試してみたのでメモ。

とりあえず発行してみる

発行自体は MSBuild を使うと簡単にできた。

MSBuild.exe hoge.csproj /t:publish

ところがVS上で設定している場所には発行されずに bin/debug/hoge.publish 以下に発行される。
どうやらかなり hoge.csproj の設定を無視するらしい。

試行錯誤してみる

MSDNによるとコマンドラインでプロパティをオーバーライドできるらしいので実行してみた。

MSBuild.exe hoge.csproj /t:publish /p:PublishUrl=c:\hoge\publish

が、結果は同じ。
隠しプロパティなのか、PublishUrl でなくて PublishDir と指定すると意図したとおりに発行される。

MSBuild.exe hoge.csproj /t:publish /p:PublishDir=c:/hoge/publish/

しかし、 publish の後ろに「 / 」がないとデプロイメントマニフェスト名が publishhoge.application のようにおかしくなり、代わりに「 \ 」を付けるとエラーになるおまけつき・・・

publish.htm が出力されない

VS上で発行したときは publish.htm という ClickOnce アプリケーションのインストールページが生成されるが、MSBuild で発行するとこれが生成されない。
以下のように明示的に指定してもダメ。謎だ。
まあ1度VSから生成してしまえば、違いはバージョン番号くらいなのでまあいいかな。

MSBuild.exe hoge.csproj /t:publish /p:PublishDir=c:/hoge/publish/;CreateWebPageOnPublish=true;WebPage=test.htm

Web アプリケーション / サービスを発行したい

ここまできたら Web アプリケーション / サービスも発行したいんだけど、これは方法が見つからない。プロジェクトファイルがないためだ。ソリューションファイルを与えると、含まれているプロジェクトを発行するだけで肝心の Web アプリケーション / サービスは発行されない。
とりあえず事前コンパイルで我慢するしかないのかな・・・