Цель перед сборкой не работает - PullRequest
0 голосов
/ 26 октября 2019

Я создал цель MSBuild для восстановления пакетов NPM в моем приложении ASP.NET Core. Я смоделировал его после собственной цели шаблона проекта Microsoft для проектов Node.js, хотя мой проект не является Node.js, он использует только пакеты NPM для определений TypeScript.

При сборке моего конвейера Azure DevOps он не запускает мою цельесли я явно не принудительно использую -t: RestoreNode . Почему моя цель срабатывает в Visual Studio, а не в DevOps? Вот моя цель:

<Target Name="RestoreNode" BeforeTargets="Build">
  <!-- Ensure Node.js is installed -->
  <Exec Command="node --version" ContinueOnError="true">
    <Output TaskParameter="ExitCode" PropertyName="ErrorCode" />
  </Exec>
  <Error Condition="'$(ErrorCode)' != '0'" Text="Node.js is required to build and run this project. To continue, please install Node.js from https://nodejs.org/, and then restart your command prompt or IDE." />
  <Message Importance="high" Text="Restoring dependencies using 'npm'. This may take several minutes..." />
  <Exec Command="npm install" />
</Target>

Вот конвейер:

trigger:
- master

pool:
  vmImage: 'windows-2019'

variables:
  buildConfiguration: 'Release'
  runtimeConfiguration: 'win-x64'

steps:
- task: DotNetCoreCLI@2
  inputs:
    command: 'build'
    arguments: '-t:RestoreNode --configuration $(buildConfiguration) --runtime $(runtimeConfiguration)'

- task: DotNetCoreCLI@2
  inputs:
    command: 'publish'
    publishWebProjects: true
    arguments: '--configuration $(buildConfiguration) --output $(Build.ArtifactStagingDirectory) --runtime $(runtimeConfiguration)'

- task: PublishBuildArtifacts@1
  inputs:
    PathtoPublish: '$(Build.ArtifactStagingDirectory)'
    ArtifactName: 'drop'
    publishLocation: 'Container'

1 Ответ

0 голосов
/ 28 октября 2019

Мне не удалось воспроизвести вышеуказанный сценарий. После добавьте projects: '**/*.csproj' к вашей первой задаче DotNetCoreCLI@2. Цель RestoreNode была выполнена правильно в моем тестовом проекте.

- task: DotNetCoreCLI@2 inputs: command: 'build' projects: '**/*.csproj' arguments: '--configuration $(buildConfiguration) --runtime $(runtimeConfiguration)'

Я также пытался выполнить задачу ниже VSBuild@1. это работало как ожидалось тоже. Вы можете попробовать эту задачу.

- task: VSBuild@1 inputs: solution: '**/*.sln' platform: '$(buildPlatform)' configuration: '$(buildConfiguration)'

Ниже я разместил журнал сборки из своего конвейера:

[command]"C:\Program Files\dotnet\dotnet.exe" build d:\a\1\s\MsBuildTarget\MsBuildTarget\MsBuildTarget.csproj --configuration Release --runtime win-x64

Welcome to .NET Core 3.0!
---------------------
SDK Version: 3.0.100
...
--------------------------------------------------------------------------------------
Microsoft (R) Build Engine version 16.3.0+0f4c62fea for .NET Core
Copyright (C) Microsoft Corporation. All rights reserved.

  Restore completed in 7.13 sec for d:\a\1\s\MsBuildTarget\MsBuildTarget\MsBuildTarget.csproj.
  MsBuildTarget -> d:\a\1\s\MsBuildTarget\MsBuildTarget\bin\Release\netcoreapp2.1\win-x64\MsBuildTarget.dll
  v10.16.3
  Restoring dependencies using 'npm'. This may take several minutes...
  npm WARN saveError ENOENT: no such file or directory, open 'd:\a\1\s\MsBuildTarget\MsBuildTarget\package.json'
  npm WARN enoent ENOENT: no such file or directory, open 'd:\a\1\s\MsBuildTarget\MsBuildTarget\package.json'
  npm WARN MsBuildTarget No description
  npm WARN MsBuildTarget No repository field.
  npm WARN MsBuildTarget No README data
  npm WARN MsBuildTarget No license field.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...