Цель построения в профиле публикации не выполняется, даже если публикация прошла успешно при запуске через VS2019 - PullRequest
0 голосов
/ 17 июня 2019

У меня есть профиль публикации: Staging.pubxml в моем .csproj (который использует .NET Core 2.1), следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<!--
https://go.microsoft.com/fwlink/?LinkID=208121. 
-->
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <PublishProtocol>FileSystem</PublishProtocol>
    <Configuration>Staging</Configuration>
    <Platform>Any CPU</Platform>
    <TargetFramework>netcoreapp2.1</TargetFramework>
    <PublishDir>bin\Release\netcoreapp2.1\publish\</PublishDir>
    <SelfContained>false</SelfContained>
    <_IsPortable>true</_IsPortable>
  </PropertyGroup>
  <Target Name="CustomActionsAfterPublish" AfterTargets="AfterPublish">
    <Message Text="First occurrence" Importance="high" />
  </Target>
</Project>

Когда я публикую его через VS2019 ; публикация завершена успешно. Тем не менее, я не вижу текст: First occurrence в окне вывода.

В VS MSBuild project build output verbosity установлено на Diagnostic.

Я делаю это неправильно?

1 Ответ

0 голосов
/ 17 июня 2019

Я делаю это неправильно?

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 вызывается во время процесса публикации.

enter image description here

(Измените значение 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 в папку публикации. См. этот снимок экрана:

enter image description here

Перейти Tools=>Options=>Project and Solutions=>Build and Run визмените подробность вывода при сборке на Подробный, и вы сможете увидеть подробности в процессе сборки и публикации в VS.

Вот почему я предлагаю вам перейти в Go Project => Properties => build build => события после сборки, чтобы использоватьКоманда xcopy для копирования файлов в папку назначения. (Или вы можете использовать скрипт, как описано выше, не забудьте изменить исходный путь и целевой путь). Когда мы хотим скопировать файлы в папке публикации, на самом деле мы пытаемся скопировать файлы из папки obj. Так что сделайте что-нибудь после того, как процесса сборки будет достаточно!Не нужно делать это после процесса публикации.

...