Инструмент веб-публикации 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>