.net core 预构建目标未运行

.net core 预构建目标未运行,.net-core,azure-devops,azure-pipelines,.net Core,Azure Devops,Azure Pipelines,我在ASP.NET核心应用程序中创建了一个MSBuild目标来还原NPM包。我按照微软自己的Node.js项目模板目标对其进行建模,虽然我的项目不是Node.js,但它只对TypeScript def使用NPM包 当我的Azure DevOps管道构建时,它不会运行我的目标,除非我使用-t:RestoreNode显式强制它。为什么我的目标会在VisualStudio中触发而不是在DevOps中触发?我的目标是: <Target Name="RestoreNode" BeforeTarget

我在ASP.NET核心应用程序中创建了一个MSBuild目标来还原NPM包。我按照微软自己的Node.js项目模板目标对其进行建模,虽然我的项目不是Node.js,但它只对TypeScript def使用NPM包

当我的Azure DevOps管道构建时,它不会运行我的目标,除非我使用-t:RestoreNode显式强制它。为什么我的目标会在VisualStudio中触发而不是在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>

我无法再现上述情景。 添加
项目后:'***.csproj'
到第一个
DotNetCoreCLI@2
任务。在我的测试项目上正确执行了
RestoreNode
目标

-任务:DotNetCoreCLI@2
投入:
命令:“构建”
项目:“***.csproj”
参数:'--configuration$(buildConfiguration)--runtime$(runtimeConfiguration)'

我还尝试了以下任务
VSBuild@1
。它也像预期的那样工作。您可以尝试执行此任务

-任务:VSBuild@1
投入:
解决方案:'***.sln'
平台:“$(构建平台)”
配置:“$(buildConfiguration)”

下面是我发布的管道生成日志:

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'
[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.

我将“项目”添加到构建任务:-任务:DotNetCoreCLI@2输入:命令:'build'项目:'*/.csproj'参数:'--configuration$(buildConfiguration)--runtime$(runtimeConfiguration)'我收到了相同的错误。libman包恢复正常,但NPM目标不运行。我还尝试了VSBuild,但无法将“-runtime”传递给MSBuild。据我所知,“运行时”必须传递给.NET核心任务。平台总是“任意CPU”。我注意到您键入的项目值是“*/.csproj”。projects属性的值应该是
“***.csproj”
,它搜索所有子目录中的所有项目(csproj)。如果dotnet生成任务找不到该项目,则无法执行目标。您可以转到构建日志,检查您定义的“NPM目标”项目是否已搜索并添加到dotnet构建命令中。对于vsbuild任务,如果您不指定一个变量来覆盖它,那么参数“platform”将获得默认平台。这种情况如何?有什么好消息吗?我想我要放弃了。。。我尝试了几种不同的“项目”变量组合,但都不起作用。我想我找到了一个提示。没有在命令行上手动指定目标,即使目标配置为BeforeTargets=“Build”,并且我尝试了BeforeTargets=“Build;Publish”,RestoreNode目标也会在生成后运行。