Подтвердить что ты не робот

Объект AfterPublish не работает

Самая простая задача в мире (см. ниже) не выполняется после публикации моего проекта веб-приложения. Любая идея почему?

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

Ответ 1

Примечание. Следующее относится к VS2010 и публикации проектов веб-приложений с использованием метода публикации "Web Deploy", выбранного в диалоговом окне "Build/Publish {projectname}".

Жюльен Хоарау прав в том, что "Опубликовать" НЕ является именем целевой задачи msbuild, вызванной в вышеуказанном случае; фактическое имя цели "MSDeployPublish" .

Следовательно, вам нужно определить элемент "Целевой" , значение атрибута "AfterTarget" : "MSDeployPublish" - "< Имя" не имеет значения (если оно уникально среди имен целей).

Вот как это сделать:

  • Откройте файл проекта (например, *.csproj) в редакторе text/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
  • В общем случае, если вам нужно определить имя цели msbuild.exe, которая фактически вызывается Visual Studio 2010, выполните следующие действия:
    • Перейдите в раздел "Инструменты/Параметры...", "Проект и решения" / "Сборка и запуск", выберите "Подробно" (или, для получения дополнительной информации "Диагностика" ) из раскрывающегося списка с надписью "Вывод сборки проекта MSBuild".
    • После запуска действия сборки/публикации, например. Build/Publish, проверьте окно вывода для последнего вхождения строки "Done building target" для определения целевой цели верхнего уровня, которая была вызвана.

Ответ 2

Visual Studio 2013. Публикация веб-приложения в файловой системе.

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

Примечание. Убедитесь, что журнал сборки установлен как минимум на Детальный. Найдите его в разделе Инструменты → Параметры → Проекты и Solutinos → Build and Run → многословность вывода MSBuild. Диагностика также прекрасна, если вы хотите исследовать, какая цель сборки была последней, до фактического опубликования.

Ответ 3

  • Вы должны определить переопределить цель в конце вашего файла, после <Import ... />
  • Запустите MSBuild с подробной подробностью, чтобы понять, почему ваша цель игнорируется:

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

AfterPublish вызывается после Publish target, но Publish не является объектом, который вызывается при публикации веб-приложения. Publish является целью публикации приложения ClickOnce.

Вам нужно будет найти цель, используемую при вызове Publish в Visual Studio, она может быть Package, WebPublish...

Ответ 4

Сейчас я немного ленив, чтобы выяснить беспорядок целей, чтобы найти правильный вариант для публикации на основе файлов (что вам может быть интересно). Тем временем вы можете определить цель AfterBuild в файле *.pubxml.

<Target Name="AfterBuild">

...

Я рекомендую также отключить свойство "DeleteExistingFiles", потому что, если вы копируете файлы в опубликованные каталоги, во время процесса публикации он делает что-то чистое.

<DeleteExistingFiles>False</DeleteExistingFiles>