こんな悩み。

経緯

下記を参考に、

  • ASP.NET プロジェクトで構成マネージャと Web.config 変換を活用する - しばやん雑記
  • Web発行先に応じてWeb.configに変更を適用する - kkamegawa's weblog

ソリューション構成を発行先に合わせて作成しておいて、TFSでこんなことしてみたりしていた。

  • WebプロジェクトをTFSでビルドした時の_PublishedWebsitesにweb.configを変換を適用する方法 #aspnetjp - KatsuYuzuのブログ

環境が増えてきてソリューション構成を作成するのが面倒になった。
そして、発行プロファイルを作るようになって、開発環境はVSからそのままデプロイまで済ませちゃって、そうじゃない環境には職人がひとつひとつ手作業でみたいな状態でTFSから成果物を持ってきていた。
それで、冒頭の悩み。

答え

TFSビルドのMSBuild引数に下記を設定。参考画像に見えるx86はSilverlight用の設定なので無関係っす。
f:id:KatsuYuzu:20140501001841p:plain

/p:PublishProfile=プロファイル名,PackageTempRootDir="hoge",AutoParameterizationWebConfigConnectionStrings=false,DeployOnBuild=true,DeployTarget=PipelinePreDeployCopyAllFilesToOneFolder
  • PublishProfile=プロファイル名
    • web.プロファイル名.config
  • PackageTempRootDir="hoge"
    • 発行先。共有フォルダーのパス。Web発行でフォルダーを選んだときと同様のものがこの共有フォルダーに出力されてくるので、TFSビルドの出力は不要だと思う。
  • AutoParameterizationWebConfigConnectionStrings=false
    • ConnectionStringがプロファイルのプレースホルダーになってしまうので無効化。
  • DeployOnBuild=true
    • デプロイ機能の有効化。
  • DeployTarget=PipelinePreDeployCopyAllFilesToOneFolder
    • デプロイ先として、Webサイトやデプロイパッケージではなく、フォルダーとする。

PublishProfileの指定には発行プロファイルの拡張子(.pubxml)は不要。
あと、発行プロファイルを用意せずにweb.プロファイル名.configだけを準備しても可能だった。ただし、その時はVisual Studio上で右クリックしても変換プレビューが見れなかった。

未解決


デプロイパッケージ(.zipと発行用コマンドファイルなど)だけがTFSビルドで欲しいな。
現状は、この記事の方法で最終配置物(非zip)が手に入る状態。TFSビルド出力を有効にすると余計なもの(すべてのアセンブリがぼろぼろあったり)が多すぎてイヤンってなる。

参考

  • ASP.NET プロジェクトで構成マネージャと Web.config 変換を活用する - しばやん雑記
  • Web発行先に応じてWeb.configに変更を適用する - kkamegawa's weblog
  • Web発行先に応じたconfig変換をコマンドラインでのビルドで適用する ~既知のバグもあるよ~ - 銀の光と碧い空
  • WebプロジェクトをTFSでビルドした時の_PublishedWebsitesにweb.configを変換を適用する方法 #aspnetjp - KatsuYuzuのブログ
  • 5分でわかるTFSでWindows Phone アプリ、Silverlightのビルドを構成する方法 #wpdev_jp - KatsuYuzuのブログ