У меня есть веб-проект ASP.NET Core 8, исходный код которого находится в папке client.
У меня также есть npm run build, который скомпилирует эти клиентские файлы и скопирует выходные данные в папку wwwroot.
Я хотел бы сделать сборку npm частью dotnet publish, а не dotnet build.
Прямо сейчас я использовал это в своем .csproj файле:
<Target Name = "NpmBuild" BeforeTargets = "Publish">
<Exec Command = "npm ci" WorkingDirectory = "client" />
<Exec Command = "npm run build" WorkingDirectory = "client" />
</Target>
Команды npm выполняются, но только до тех пор, пока папка publish не будет заполнена командой публикации.
Как правильно обеспечить выполнение команд npm перед копированием файлов в выходную папку?
Попробуйте BeforeTargets = "BeforePublish". BeforePublish публично задокументирован.
@JonathanDodds Это помогло мне. Спасибо. Вы хотите добавить ответ, который я могу принять, или мне следует опубликовать фиксированный код самостоятельно?
Использование BeforeTarget правильно, но оно не работает должным образом. Почему? Это связано с тем, что общедоступные цели не отображают всю цепочку. Вы можете ввести «dotnetPublish -v Diag», чтобы увидеть все цели, выполненные перед публикацией. i.sstatic.net/EDlHOREZ.png Как вы можете видеть на картинке, перед публикацией выполняется так много целей, что ваш код работает не так корректно. Другими словами, цели, показанные в списке, могут быть выбраны для установки BeforeTargets так, как вы хотите, чтобы они соответствовали вашему дизайну настройки.
@FengzhiZhou На изображении показана «Сводка целевой производительности». Порядок целей в сводке не является порядком выполнения целей.





Существуют заранее определенные цели до и после конкретных шагов. Смотрите Таблицу предустановленных целей.
Среди предопределенных целей есть цель BeforePublish. Цель BeforePublish будет выполнена раньше цели Publish.
Измените цель NpmBuild для использования BeforeTargets = "BeforePublish".
<Target Name = "NpmBuild" BeforeTargets = "BeforePublish">
<Exec Command = "npm ci" WorkingDirectory = "client" />
<Exec Command = "npm run build" WorkingDirectory = "client" />
</Target>
В документации говорится о переопределении предопределенной цели. При наличии нескольких переопределений будет использоваться последнее определенное переопределение. Функция других переопределений будет «потеряна». Однако несколько целей могут использовать BeforeTargets = "BeforePublish" без конфликта.
Используйте атрибуты
BeforeTargets = "Publish"иAfterTargets = "PrepareForPublish"в своем файле.csproj. Learn.microsoft.com/en-us/visualstudio/msbuild/…