web-dev-qa-db-ja.com

AfterPublishターゲットが機能しない

Webアプリケーションプロジェクトを公開した後、世界で最も単純なタスク(以下を参照)が実行されていません。理由は何ですか?

<Target Name="AfterPublish">
  <Copy SourceFiles="C:\A.txt" DestinationFiles="C:\B.txt" />
</Target>
31
Mark

注:以下は、VS2010と、[ビルド/公開{プロジェクト名}]ダイアログで選択された[Web配置]公開方法を使用したWebアプリケーションプロジェクトの公開に適用されます。

Julien Hoarauの「公開」の正解は、上記の場合に呼び出されたmsbuildターゲットの名前ではありません。実際のターゲット名は "MSDeployPublish"です。

したがって、 "Target"要素を定義する必要があります。その "AfterTarget" )属性の値は "MSDeployPublish"に設定されます-"Name"属性の値はnotではありません(ターゲット名の中で一意である限り)。

方法は次のとおりです。

  • プロジェクトファイル(* .csprojなど)をテキスト/ XMLエディターで開き、</Project>タグを閉じる直前に、<Target Name="CustomPostPublishAction" AfterTargets="MSDeployPublish">要素を追加します。 「CustomPostPublishAction」に任意の名前を選択してください。
  • 目的のアクションを実行する、いわゆるTask子要素を追加します。たとえば、cmd.exeに渡すコマンドを追加するには、<Exec Command="..." />要素を使用します。

例:

<Target Name="CustomPostPublishActions" AfterTargets="MSDeployPublish" >
    <Exec Command="echo Post-PUBLISH event: Active configuration is: $(ConfigurationName)" />
</Target>

注意:

  • コマンド文字列では、XML解析を中断する文字の代わりにXMLエンティティ(?)参照を使用します。 「<」の代わりに「&gt」。
  • 一般的な<Target>要素のドキュメントについては、 http://msdn.Microsoft.com/en-us/library/t50z2hka.aspx を参照してください。
  • ここでのタスク要素の参照: http://msdn.Microsoft.com/en-us/library/7z253716.aspx
  • 一般に、Visual Studio 2010によって実際に呼び出されるmsbuild.exeターゲットの名前を特定する必要がある場合は、次の手順を実行します。
    • [ツール]/[オプション...]、[プロジェクトとソリューション]、[ビルドと実行]に移動し、[MSBuildプロジェクトビルド出力の冗長性]というラベルの付いたドロップダウンリストから[詳細](または詳細については[診断])を選択します。
    • ビルド/公開アクションを実行した後、例:ビルド/公開し、出力ウィンドウで文字列「Done building target」のlastオカレンスを調べて、呼び出された最上位のターゲットを判別します。
32
mklement0

VisualStudio2013。Webアプリケーションをファイルシステムに公開します。

  <Target Name="Moose" AfterTargets="GatherAllFilesToPublish" >
    <Message Importance="high" Text="***Moooooooooooooooose***$(WPPAllFilesInSingleFolder)***$(TargetDir)" />
  </Target>

注:ビルドログが少なくとも詳細に設定されていることを確認してください。 [ツール]-> [オプション]-> [プロジェクトとSolutinos]-> [ビルドと実行]-> [MSBuild出力の詳細度]で検索します。実際の公開前に最後に実行されたビルドターゲットを調査する場合も、診断は問題ありません。

22
Fosna
  • ファイルの最後の<Import ... />の後にターゲットのオーバーライドを定義する必要があります
  • 詳細な詳細情報を使用してMSBuildを起動し、ターゲットが無視される理由を確認します。

    msbuild project.csproj /t:Target_to_Launch /v:d
    

AfterPublishPublishターゲットの後に呼び出されますが、PublishはWebアプリケーションを公開するときに呼び出されるターゲットではありません。 Publishは公開のターゲットですClickOnceアプリケーション。

VisualStudioでPublishを呼び出すときに使用されるターゲットを見つける必要があります。これは、PackageWebPublish...の場合があります。

2
Julien Hoarau

私は今、ファイルベースの公開に適したターゲットを見つけるためにターゲットの混乱を理解するのが少し怠惰です(あなたが興味を持っているかもしれません)。その間にできることは、*。pubxmlファイルでAfterBuildターゲットを定義することです。

<Target Name="AfterBuild">

.。

公開中のディレクトリにファイルをコピーすると、公開プロセス中のどこかでクリーンアップが行われるため、プロパティ「DeleteExistingFiles」もオフにすることをお勧めします。

<DeleteExistingFiles>False</DeleteExistingFiles>
0