Visual Studio 2010のWebサイトプロジェクトに追加されたweb.config変換機能は、コマンドラインおよびTFSビルドではデフォルトで無効になっています。
2つの比較的簡単な解決策があります。
オプション1:ビルド定義を編集し、[MSBuild引数]フィールドに以下を追加します。
/p:UseWPP_CopyWebApplication=true /p:PipelineDependsOnBuild=false
UseWPP_CopyWebApplicationにより、ビルド用に新しいWeb Publishing Pipeline(WPP)がアクティブ化されます。WPPはweb.config変換を実行し、.PDBファイルなどがbinフォルダーにコピーされるのをブロックするためにも使用できます。
オプション2:MSBuildとWPPの両方が完全に拡張可能です。プロジェクトと同じディレクトリに新しいXMLファイルを作成し、「。targets」拡張子を使用します(たとえば、ProjectName.custom.targets)。次のMSBuildコードをターゲットファイルに配置します。
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<UseWPP_CopyWebApplication>True</UseWPP_CopyWebApplication>
<PipelineDependsOnBuild>False</PipelineDependsOnBuild>
</PropertyGroup>
</Project>
ウェブサイトを右クリックして、[プロジェクトのアンロード]を選択します。アンロードされたプロジェクトを右クリックして、[編集]を選択します。プロジェクトファイルの一番下までスクロールして、次の行を探します。
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />
これらの行は、C#とWebプロジェクトのビルドプロセスが接続される場所です。CSharpインポートの直前に、カスタムビルド拡張機能(ターゲットファイル)へのインポートを挿入します。
<Import Project="ProjectName.custom.targets"/>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />
それだけです-あなたは行ってもいいです。MSBuildのカスタマイズ方法は、セットアップに少し手間がかかりますが、新しいターゲットファイルを使用してビルドプロセスに「フック」し、サーバーでのビルドの実行方法をより詳細に制御できるという利点があります。たとえば、タスクをフックしてCSSとJSの圧縮を実行できます。
また、「wpptargets」を確認することをお勧めします。「ProjectName.wpp.targets」という特定の名前で別のMSBuildファイルに名前を付けると、Webサイトの公開プロセス全体を制御できます。公開されたWebサイトの出力がコピーされるときに、これを使用して-vsdocjavascriptドキュメントファイルを削除します。
<ItemGroup>
<ExcludeFromPackageFiles Include="Scripts\**\*-vsdoc.js;Resources\Scripts\**\-vsdoc.js">
<FromTarget>Project</FromTarget>
</ExcludeFromPackageFiles>
</ItemGroup>
とはいえ、ビルドから本番Web.configsを完全に除外したほうがよいでしょう。変換を本番デプロイメントマシンに直接配置し、PowerShellを使用してアプリケーションをデプロイするときに変換します。