44

リリース ビルドの実行時に 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 がすべてコピーされます。

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

4

1 に答える 1

75

私はこれのために壁に頭をぶつけてきました。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はレガシーになりましたが、$(UseWPP_CopyWebApplication)をtrueに設定することで引き続き使用できます。デフォルトでは、Microsoft.Web.Publish.targetsの_WPPCopyWebApplicationターゲットを使用するように変更されています。これにより、web.configtrsnaformationを活用できます。[すべて原文のまま]

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

于 2010-06-01T21:11:37.947 に答える