Цель AfterPublish не работает - PullRequest
       39

Цель AfterPublish не работает

29 голосов
/ 25 августа 2010

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

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

Ответы [ 4 ]

32 голосов
/ 24 июля 2011

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

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

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

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

  • Откройте файл проекта (например, * .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» вместо «<». </li>
  • Для документации по элементу <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».
    • После запуска действия сборки / публикации, например, Построение / публикация, проверьте окно «Вывод» на предмет наличия last вхождения строки «Готово создание цели», чтобы определить цель верхнего уровня, которая была вызвана.
20 голосов
/ 02 октября 2014

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

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

Примечание. Убедитесь, что для ведения журнала сборки установлено значение как минимум Подробное. Ищите его в Сервис -> Параметры -> Проекты и Solutinos -> Построить и запустить -> MSBuild. Диагностика также подойдет, если вы хотите выяснить, какая цель сборки была выполнена в последний раз перед фактической публикацией.

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

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

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

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

0 голосов
/ 29 марта 2013

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

<Target Name="AfterBuild">

...

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

<DeleteExistingFiles>False</DeleteExistingFiles>
...