首页 > 解决方案 > 预构建目标未运行

问题描述

我创建了一个 MSBuild 目标来恢复我的 ASP.NET Core 应用程序中的 NPM 包。我在 Microsoft 自己的 Node.js 项目的项目模板目标之后对其进行了建模,尽管我的项目不是 Node.js,它仅使用 NPM 包进行 TypeScript defs。

当我的 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'

标签: .net-coreazure-devopsazure-pipelines

解决方案


我无法重现上述情况。添加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.

推荐阅读