При просмотре файлов MSBuild, которые использует Visual Studio, событие после сборки запускается целью сборки. Если вы запускаете msbuild из командной строки и напрямую вызываете цель публикации, она определенно сначала вызывает Build. Если щелкнуть правой кнопкой мыши проект в VS и щелкнуть «Опубликовать», запускается урезанная цель с именем PublishOnly, при условии, что VS уже выполнил сборку.
Событие после сборки должно запускаться Visual Studio, когда он автоматически создает проект перед публикацией. На вкладке «События сборки» в свойствах вашего проекта вы установили событие «всегда запускать»?
Если вы хотите более подробно рассказать о том, что происходит перед публикацией, есть цель BeforePublish, которую всегда ищет публикация, независимо от того, выполняется она MSBuild или Visual Studio. Отредактируйте файл проекта вручную, и внизу вы увидите пару закомментированных целевых элементов. Добавьте свой собственный как это:
<Target Name="BeforePublish">
<Exec Condition="'$(PostBuildEvent)' != ''"
WorkingDirectory="$(OutDir)" Command="$(PostBuildEvent)" />
</Target>
Это будет запускать то же событие после сборки, которое вы определили в своем проекте, но вы можете поместить любые задачи MSBuild в эти элементы Target.