Я делаю это неправильно?
1.На друг, файл .pubxml не подходит для определения пользовательской цели.
В соответствии с вашей цельюимя, вы хотите запустить цель после сборки цели.Для этой ситуации: всегда определяем пользовательскую цель в файле проекта.Пожалуйста, попробуйте right-click your project
, выберите edit xxx.csproj
и добавьте в него цель.Затем перезагрузите проект и опубликуйте его, затем вы можете найти сообщение First occurrence
в выводе сборки.
И после моего теста в файле .csproj цель не может быть названа AfterBuild, вы можете изменить ееto:
<Target Name="CustomTargetName" AfterTargets="build">
<Message Text="First occurrence" Importance="high" />
</Target>
2. Также способ, которым вы используете, может работать в VS2019, хотя мы не рекомендуем добавлять его в .pubxml.Но это действительно работает.По причине того, что вы не можете получить сообщение в окне вывода, проверьте, действительно ли Staging.pubxml вызывается во время процесса публикации.
(Измените значение PublishDir на другую папку и снова опубликуйте его, проверьте, опубликован ли проект в новом каталоге, затем вывыясним, используется ли xxx.pubxml)
Обновление:
Согласно вашему файлу .pubxml ваш проект представляет собой ядро .net консольное приложение вместо основного веб-приложения asp.net .Это имеет значение!
Я тестирую его как на VS2017, так и на VS2019, и нахожу, что цель хорошо работает в веб-приложении asp.net, но не на консоли ядра .net.Я полагаю, что для этих не-веб-приложений этот вид цели после публикации может не поддерживаться.
И, пожалуйста, проверьте эти два официальных документа, которые я нашел:
Ядро Asp.net: Запустите цель до или после публикации
.net core: Развертывание приложений .net core с VS
Я не могу найти никаких пользовательских целей, связанных синформация в основном документе .net.Поэтому я боюсь, что это может не поддерживаться дизайном
Update2:
На самом деле ваша первоначальная потребность - добавить цель CopyFiles для публикации процесса.Поэтому я предполагаю, что вы действительно хотите copy sth to Publish Folder after Publish
обработать или copy sth from Publish Folder to target folder
.
Хотя цель после публикации не поддерживается в приложениях консоли ядра .net.У нас есть соответствующие обходные пути:
- Чтобы скопировать sth в папку публикации после публикации:
В этой ситуации вы можете добавить цель после сборки, чтобы скопировать файлы в папку публикацииперед публикацией процесса.Я думаю, что это работает для этой ситуации:
<Target Name="CustomTarget" AfterTargets="build">
<ItemGroup>
<MySourceFiles Include="xxx\pathToTheFolderWhereYourFilesAre\*.*"/>
</ItemGroup>
<Copy
SourceFiles="@(MySourceFiles)"
DestinationFolder="$(ProjectDir)bin\Release\netcoreapp2.1\publish\"
/>
</Target>
- Чтобы скопировать sth из папки публикации в целевую папку:
Для консольного приложения ядра .net, на самом делетак называемый процесс публикации - копирование файлов из папки obj в папку публикации. См. этот снимок экрана:
Перейти Tools=>Options=>Project and Solutions=>Build and Run
визмените подробность вывода при сборке на Подробный, и вы сможете увидеть подробности в процессе сборки и публикации в VS.
Вот почему я предлагаю вам перейти в Go Project => Properties => build build => события после сборки, чтобы использоватьКоманда xcopy для копирования файлов в папку назначения. (Или вы можете использовать скрипт, как описано выше, не забудьте изменить исходный путь и целевой путь). Когда мы хотим скопировать файлы в папке публикации, на самом деле мы пытаемся скопировать файлы из папки obj. Так что сделайте что-нибудь после того, как процесса сборки будет достаточно!Не нужно делать это после процесса публикации.