Инструмент веб-публикации pubxml Event Lifecycle

Я использую инструмент веб-публикации из Visual Studio 2012 для публикации в файловой системе. Я узнал, что могу открыть свой *.pubxml в папке "Свойства", чтобы сделать более сложные вещи.

То, что я хочу сделать, это запустить приложение командной строки в конце задачи публикации. Я обычно делал бы это в Custom Target и выполнял его после одной из таких встроенных событий.

 <Target Name="CustomAfterPublish" AfterTargets="GatherAllFilesToPublish">
 </Target>

Проблема в том, что GatherAllFilesToPublish Это путь рано, потому что я хочу выполнить его в самый последний момент, после того, как публикация была завершена. Есть ли список или кто-то знает, в каких событиях и в каком порядке они запускаются? В основном жизненный цикл события веб-публикации FileSystem.

Или как я могу запустить цель вручную в самом конце?

Я попытался следовать без успеха:

<Target Name="Msg" AfterTargets="PipelineDeployPhase;MSDeployPublish;Package">

А также каждый из них в отдельности. Так, каков последний крюк жизненного цикла публикации?

---> Отредактировано я добавил уже трассировку. Проблема в том, что файлы были скопированы во временный путь, после чего все файлы были удалены. Таким образом, копирование в место назначения не будет работать после "GatherAllFilesToPublish"Смотрите мой след из окна командной строки здесь...

1>------ Build started: Project: Dependency of a project: Release Any CPU ------
2>------ Build started: Project: Dependency of another project, Configuration: Release Any CPU ------


3>------ Build started: Project: Web, Configuration: Release Any CPU ------
4>------ Publish started: Project: Web, Configuration: Release Any CPU ------
4>Transformed Web.config using C:\...\Web.Release.config into obj\Release\TransformWebConfig\transformed\Web.config.
4>Copying all files to temporary location below for package/publish:
4>obj\Release\Package\PackageTmp.

**<------------- Here is the place where my excutable is called ---------------------------------**


4>Deleting existing files...
4>Publishing folder /...
4>Publishing folder App_Browsers...
4>Publishing folder App_Themes...
4>Publishing folder bin...

4>Site was published successfully file:///C:/Test
4>
========== Build: 3 succeeded, 0 failed, 1 up-to-date, 0 skipped ==========
========== Publish: 1 succeeded, 0 failed, 0 skipped ==========

Спасибо за любую помощь.

3 ответа

Решение

Насколько я могу судить GatherAllFilesToPublish последнее доступное событие Однако, в зависимости от ваших требований, вы все равно сможете использовать это событие.

Вместо выполнения операций с файлами в конечном месте публикации вы можете указать промежуточные файлы, записанные в расположении ниже (где ProjectDir - это, очевидно, папка вашего проекта).

/ProjectDir/ объект /Release/ пакет /PackageTmp/

Кажется, что Visual Studio делает прямую копию всех файлов в этом каталоге. Итак, при подключении GatherAllFilesToPublish Вы должны иметь возможность вносить любые изменения в файлы в этом каталоге, и они будут отражены в окончательном месте публикации.


Связанная информация

Если вы хотите проверить это GatherAllFilesToPublish действительно последнее событие, когда вы можете сделать это самостоятельно, включив вывод диагностической сборки.

Инструменты -> Параметры -> Проекты и решения -> Построить и запустить -> Детализация вывода проекта MSBuild -> Диагностика

Создайте проект и выполните поиск цели "Готово" "GatherAllFilesToPublish", для меня это был последний триггер, прежде чем он начал копировать файлы в место публикации.

У меня была похожая проблема.

Насколько я мог проверить, "GatherAllFilesToPublish" является последней целью, с которой вы можете иметь дело. Вы можете использовать это, делая AfterTargets.

И использовать это>

$(MSBuildProjectDirectory)\obj\Release\Package\PackageTmp

Чтобы манипулировать чем-либо там.

Я создал файл.bat для грязной работы.

Вы можете узнать, какая из них является переменной, в которой хранится относительная часть пути (\obj\Release\Package\PackageTmp), и использовать ее более изощренным способом.

У меня такая же проблема. Ваше решение

Сначала скопируйте в временный каталог и дайте веб-публикации забрать копирование для публикации

было полезно.

Я просто хочу поделиться с другими людьми, как это можно сделать:

<Target Name="CopyConfigForPublish" AfterTargets="CopyAllFilesToSingleFolderForPackage" Condition="exists('$(SolutionDir)Web.Common\bin\$(Configuration)\Log.config')">
    <Copy SourceFiles="$(SolutionDir)Web.Common\bin\$(Configuration)\Log.config" DestinationFolder="$(WPPAllFilesInSingleFolder)" />
</Target>
Другие вопросы по тегам