web-dev-qa-db-ja.com

_CopyWebApplicationとweb.config変換

リリースビルドの実行時にWebアプリケーションを自動的に公開させようとしています。 _CopyWebApplicationターゲットを使用してこれを行っています。 .csprojファイルに以下を追加しました。

  <!-- Automatically Publish in Release build. -->
  <Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />
  <Target Name="AfterBuild">
    <RemoveDir Directories="$(ProjectDir)..\Output\MyWeb" ContinueOnError="true" />
    <MSBuild Projects="MyWeb.csproj" Properties="Configuration=Release;WebProjectOutputDir=$(ProjectDir)..\Output\MyWeb;OutDir=$(ProjectDir)bin\" Targets="ResolveReferences;_CopyWebApplication" />
  </Target>

これは機能しますが、1つの問題があります。この出力と、Visual Studioで[公開]メニュー項目を使用したときに生成される出力の違いは、MSBuildメソッドを使用するとWeb.Release.config変換がWeb.configファイルに適用されないことです。代わりに、Web.config、Web.Release.config、およびWeb.Debug.configがすべてコピーされます。

どんなアイデアでも大歓迎です。

43
Jeremy

私はこれのために壁に頭をぶつけてきました。 MSBuildターゲットをハイキングした後、非常に「不透明」なものに出くわしました。

短編小説:新しい_WPPCopyWebApplicationを使用してみてください。それは私のマシンで動作します。古い_CopyWebApplicationは、従来の理由で変換をサポートしていません。これが私がすることです:

msbuild /t:Rebuild /p:OutDir=..\publish\;Configuration=Release;UseWPP_CopyWebApplication=True;PipelineDependsOnBuild=False MvcApplication1\MvcApplication1.csproj

# UseWPP_CopyWebApplication = true requires PipelineDependsOnBuild = false

長い話:

VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targetsをご覧ください。それはとても間違っています。 70行目で_CopyWebApplicationを見つけます。コメントは次のとおりです。

元の_CopyWebApplicationはレガシーになりましたが、$(seWPP_CopyWebApplication)をtrueに設定することで引き続き使用できます。デフォルトでは、Microsoft.Web.Publish.targetsの_WPPCopyWebApplicationターゲットを使用するように変更されています。これにより、web.configtrsnaformationを活用できます。 [すべて原文のまま]

ええとああ。 UseWPP_CopyWebApplicationのデフォルトはfalse(27行目)です。これは、既存の_CopyWebApplicationを壊したくない場合に意味があります。したがって、trueに設定すると、実際にはVS 2010に導入された新しいWPPのものが使用されます。私は、「非表示」ターゲットを呼び出すよりもこれを好みます。

74
Jabe