Ответ 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" для определения целевой цели верхнего уровня, которая была вызвана.