如何在 Azure Pipeline 中恢复 NuGet 包?

How to restore NuGet package in Azure Pipeline?

我是 Azure DevOps 的新手,正在尝试创建我的第一个 Azure 管道。我有一个 ASP.NET MVC 项目,有几个 NuGet 包需要在 MSBuild 步骤之前恢复。

不幸的是,NuGet 恢复失败并出现以下错误:

The pipeline is not valid. Job Job_1: Step 'NuGetCommand' references task 'NuGetCommand' at version '2.194.0' contains an execution handler that relies on NodeJS version '6' which is restricted by your administrator.

NodeJS 6 开箱即用,因此我们不会启用它。

我的问题:

  1. 是否有不使用 NodeJS 的 NuGet 还原的替代方法?
  2. 有没有办法将 NodeJS6 更新到更高版本?

2021 年 11 月 23 日更新

我暂时找到了解决方法。我正在使用自定义 PowerShell 脚本来恢复 NuGet 包并构建 Visual Studio 项目

$msBuildExe = 'C:\Program Files (x86)\Microsoft Visual Studio19\Enterprise\MSBuild\Current\Bin\MSBuild.exe'

 Write-Host "Restoring NuGet packages" -foregroundcolor green
    & "$($msBuildExe)" "$($path)"  /p:Configuration=Release /p:platform=x86 /t:restore

注意:$path这是我的 .csproj 文件的路径

显然,其他人也遇到了同样的问题,OpenSource 社区更新任务只是时间问题。

以下是其他任务中也面临的一些类似问题:

它是 AzureDevOps' NuGetCommand task that uses NodeJS,而不是 NuGet 本身。因此,您可以找到一种不使用 Azure DevOps 的 NuGetCommand 任务来恢复的方法。

思路一:使用DotnetCoreCli task instead. However, this probably won't work for you since you said your project is ASP.NET MVC, rather than ASP.NET Core. Also, it also appears to need NodeJS to run.

思路二:使用MSBuild还原。您可以通过清除全局包文件夹或临时配置 NuGet 以使用不同的路径,然后从 Developer PowerShell 中 运行ning msbuild -t:restore My.sln For [=38] 在本地计算机上测试这是否有效=]提示。如果您的项目使用 packages.config,而不是 PackageReference,您还需要传递 -p:RestorePackagesConfig=true(尽管 maybe this is currently broken). I'm not an expert on Azure Pipelines tasks, so I don't know what it means that this task defines both PowerShell and Node execution entry points,但也许这意味着即使您的 CI 代理也能正常工作不允许 NodeJS。

想法 3:不要使用任何内置任务,只需使用 - script:- task: PowerShell@2,但即便如此它是否会工作也有点疑问,因为即使 the powershell task defines a Node execution entry point。我猜它会起作用,但我无法访问禁止使用 NodeJS 的 CI 代理,所以即使我想测试也无法测试。无论如何,如果这可行,那么您可以自己 运行 MSBuild(但如果它不在路径上,您也可能有责任找到 msbuild.exe)。或者您可以自己下载 nuget.exe 并在您的脚本中执行它。关键是,如果你能让 Azure Pipeline 的 script 任务正常工作,你就可以 运行 任何脚本并自己做你需要的一切。

想法 4:Use Microsoft Hosted agents。他们记录了他们在机器上预装的所有软件,其中包括 Node JS。缺点是,一旦超过免费配额,就会花钱,我曾在那些更容易赚钱的公司工作一次性购买硬件,并假装服务器的维护是免费的,即使这会降低团队生产力,而不是支付每月服务费用。所以,如果这不是您的选择,我会完全理解。

想法 5:与维护您的 CI 代理的人交谈并说服他们允许并安装 NodeJS。它显然是 Azure Pipelines 的基本组成部分。这些任务在 github 上是开源的,您可以看到几乎所有任务都使用 NodeJS 来编排它所做的任何工作。坦率地说,我认为代理软件本身是一个 NodeJS 应用程序,所以我很惊讶它 运行 没有 NodeJS。