【问题标题】:How to restore NuGet package in Azure Pipeline?如何在 Azure Pipeline 中恢复 NuGet 包?
【发布时间】:2021-12-29 10:05:14
【问题描述】:

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

很遗憾,NuGet 还原失败并出现以下错误:

管道无效。作业 Job_1:步骤“NuGetCommand”引用 版本“2.194.0”的任务“NuGetCommand”包含一个执行处理程序 依赖于受您的限制的 NodeJS 版本“6” 管理员。

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

我的问题:

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

2021 年 11 月 23 日更新

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

$msBuildExe = 'C:\Program Files (x86)\Microsoft Visual Studio\2019\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 文件的路径

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

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

【问题讨论】:

    标签: azure azure-devops nuget azure-pipelines


    【解决方案1】:

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

    想法1:改用DotnetCoreCli task。但是,这可能对您不起作用,因为您说您的项目是 ASP.NET MVC,而不是 ASP.NET Core。另外,it also appears to need NodeJS to run

    想法 2:使用 MSBuild 还原。您可以通过清除全局包文件夹或临时将 NuGet 配置为使用不同的路径,然后从 Developer PowerShell For Visual Studio 提示符运行 msbuild -t:restore My.sln 在本地计算机上测试这是否有效。如果您的项目使用packages.config,而不是PackageReference,您还需要传递-p:RestorePackagesConfig=true(尽管maybe this is currently broken)。我不是 Azure Pipelines 任务方面的专家,所以我不知道 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 的情况下运行。

    【讨论】:

    • 感谢您的回答。我尝试了Idea 3并编写了PowerShell脚本来恢复NuGet并暂时构建项目。我已经用脚本更新了我的问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-21
    • 1970-01-01
    • 1970-01-01
    • 2019-10-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多