次のセットアップがあります: ASP.Net MVC .Net 4.0 ソリューションに 5 つのプロジェクトがあり、いくつかのソリューション構成 ( Site1-Stage、Site1-Live、Site2-Stageなど)。その理由は単純です。同じコードベースを、異なる構成設定で複数のサーバーにデプロイします。
これらの構成を管理するために、Troy Hunt がYou're deploy it wrong!で説明したアプローチを使用します。TeamCity、Subversion & Web Deploy パート 1: 構成変換の記事。つまり、SVN リポジトリにweb.configがありません。代わりに、プロジェクトAfterBuildターゲットにWeb.Base.Config、Web.Site1-Stage.ConfigなどとXmlTransformationタスクがあります。ビルド中に、選択した構成に基づいて必要なweb.configが生成されます。
<UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.Tasks.dll" />
<Target Name="AfterBuild">
<TransformXml Source="Web.Base.config" Transform="Web.$(Configuration).config" Destination="Web.config" StackTrace="true" />
</Target>
ここで問題が発生します: MSBuild を次のように実行すると:
msbuild MySolution.sln /P:configuration=Site1-Stage /t:rebuild
すべてがうまくいき、web.config がSite1-Stage構成用に適切に生成されます。ただし、このコマンドを実行すると:
msbuild MySolution.sln /P:configuration=Site1-Stage /t:rebuild /P:DeployOnBuild=True
次のエラーが表示されます。
"MySolution.sln" (リビルド ターゲット) (1) -> "MySolution\MyWebProj.csproj" (リビルド ターゲット) (3) -> (PreTransformWebConfig ターゲット) -> C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio \v10.5\Web\Microsoft.Web.Publishing.targets(1399,5): エラー: ファイル Web.config を obj\Site1-Stage\TransformWebConfig\original\Web.config にコピーできませんでした。ファイル 'Web.config' が見つかりませんでした。[MySolution\MyWebProj.csproj]
「AfterBuild」ターゲットを MSBuild コマンド ラインに明示的に追加しようとしました。
msbuild MySolution.sln /P:configuration=Site1-Stage /t:rebuild,AfterBuild /P:DeployOnBuild=True
しかし、同じエラーが発生しました。
これが必要な理由:これは非常に孤立した例であり、実際には、TeamCity CI サーバーから自動公開をセットアップしようとしています。現在の公開ステップの前に「Visual Studio (sln)」ランナーを使用して新しいビルド ステップを追加すると、最初にプロジェクトが再構築され (そして web.config が生成され)、公開されると思います。ただし、公開手順がたくさんあり (現在は約 20)、それは避けたいと思います。私の理解では、「発行」プロセスはその一部としてビルドを行うので、それを「再利用」したいと思います。
質問: MSBuild コマンド ラインを変更して、構成変換を強制的に実行するにはどうすればよいですか?
ありがとうございました。