带有 NuGet 上游源的 Azure DevOps Artifacts 源的安装包失败

Posted

技术标签:

【中文标题】带有 NuGet 上游源的 Azure DevOps Artifacts 源的安装包失败【英文标题】:Install-Package with Azure DevOps Artifacts feed with NuGet upstream source is failing 【发布时间】:2020-03-16 17:04:33 【问题描述】:

问题

我正在尝试从公共存储库安装软件包。我想使用 PackageSource External。这是一个 Azure DevOps 工件源,使用 NuGet 库 配置为 Upstream source。由于 NuGet Gallery 是上游源,我对包的请求应该通过 Artifacts 并由上游源完成,但它会出错并说不匹配。

另一方面,如果我使用直接指向 NuGet Gallery 的 PackageSource 提交相同的请求,它就可以工作。 Artifacts 中的上游源功能会被破坏吗?


包源

[D:\MySandboxes\TFS\Development\DevOps\]
>Get-PackageSource

Name                             ProviderName     IsTrusted  Location
----                             ------------     ---------  --------
Microsoft Visual Studio Offli... NuGet            False      C:\Program Files (x86)\Microsoft SDKs\NuGetPackages\
Internal                         NuGet            False      http://azuredevops/Development/_packaging/Internal/nuget/v3/index.json
External                         NuGet            False      http://azuredevops/Development/_packaging/External/nuget/v3/index.json
MyNuGet                          NuGet            False      https://www.nuget.org/api/v2
PSGallery                        PowerShellGet    False      https://www.powershellgallery.com/api/v2

使用 Azure DevOps Artifacts 包源安装包(失败)

[D:\MySandboxes\TFS\Development\DevOps\]
>Install-Package Resta.UriTemplates -Source External -Destination "."
Install-Package : No match was found for the specified search criteria and package name 'Resta.UriTemplates'. Try Get-PackageSource to see all available registered package sources.
At line:1 char:1
+ Install-Package Resta.UriTemplates -Source External -Destination "."
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (Microsoft.Power....InstallPackage:InstallPackage) [Install-Package], Exception
    + FullyQualifiedErrorId : NoMatchFoundForCriteria,Microsoft.PowerShell.PackageManagement.Cmdlets.InstallPackage

使用 NuGet Gallery 包源安装包(成功)

[D:\MySandboxes\TFS\Development\DevOps\]
>Install-Package Resta.UriTemplates -Source MyNuGet -Destination "."
The package(s) come(s) from a package source that is not marked as trusted.
Are you sure you want to install software from 'MyNuGet'?
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "No"): a

Name                           Version          Source           Summary
----                           -------          ------           -------
Resta.UriTemplates             1.3.0            MyNuGet          .NET implementation of the URI template spec (RFC6570). Supports up to level 4 template expressions.

【问题讨论】:

【参考方案1】:

上游源功能在我这边运行良好。但是,我在安装包期间没有收到此推广信息。

The package(s) come(s) from a package source that is not marked as trusted.
Are you sure you want to install software from 'MyNuGet'?
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "No"): a

这似乎与您的本地安全设置有关。不知道如何启用或禁用。不过根据你的描述和情况。在我看来,我想知道您在使用 Azure DevOps Artifacts 包源安装包期间是否有跳转。

由于与直接连接 NuGet Gallery 不同,您需要先访问 Azure DevOps Artifacts Feed,然后通过上游源来获取该包。您无法选择信任信息,它选择默认(默认为“否”)。最后,您无法安装该软件包。

您可以关闭本地安全设置并重试,这可能会奏效。如果由于政策原因,您无法将其关闭。

作为一种解决方法,您可以在关闭上游的情况下创建需求提要,并将您的包上传到提要中作为包源。

【讨论】:

感谢您的回复帕特里克!经过一些额外的测试并使用更改为使用nuget.exe 命令安装包而不是Install-Package,它现在似乎可以工作了。我猜我的Install-Package cmdlet 可能是旧的挑剔版本。我将在答案中写下来,但我仍然不完全确定为什么 Install-Package 失败但 nuget.exe install 有效。【参考方案2】:

所以在做了一些额外的测试之后,我确实发现使用 nuget.exe CLI 可以在 Install-Command cmdlet 失败的地方工作。

不幸的是,我仍然不完全确定为什么会发生这种行为。

下面是我的Install-Package版本

>Get-Command -name 'Install-Package'

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Cmdlet          Install-Package                                    1.4.3      PackageManagement

还有我的nuget.exe版本

>nuget
NuGet Version: 5.2.0.6090

最后,这是 nuget.exe 命令成功的输出。

[C:\Users\srz\]
>nuget install Microsoft.Extensions.Primitives -Version 3.0.1 -Source "External"
Feeds used:
  C:\Users\srz\.nuget\packages\
  http://azuredevops/Development/_packaging/External/nuget/v3/index.json



Attempting to gather dependency information for package 'Microsoft.Extensions.Primitives.3.0.1' with respect to project 'C:\Users\srz', targeting 'Any,Version=v0.0'
Gathering dependency information took 651.6 ms
Attempting to resolve dependencies for package 'Microsoft.Extensions.Primitives.3.0.1' with DependencyBehavior 'Lowest'
Resolving dependency information took 0 ms
Resolving actions to install package 'Microsoft.Extensions.Primitives.3.0.1'
Resolved actions to install package 'Microsoft.Extensions.Primitives.3.0.1'
Retrieving package 'Microsoft.Extensions.Primitives 3.0.1' from 'External'.
  GET http://azuredevops/Development/_packaging/abc123/nuget/v3/flat2/microsoft.extensions.primitives/3.0.1/microsoft.extensions.primitives.3.0.1.nupkg
  OK http://azuredevops/Development/_packaging/abc123/nuget/v3/flat2/microsoft.extensions.primitives/3.0.1/microsoft.extensions.primitives.3.0.1.nupkg 229ms
Installing Microsoft.Extensions.Primitives 3.0.1.
Adding package 'Microsoft.Extensions.Primitives.3.0.1' to folder 'C:\Users\srz'
Added package 'Microsoft.Extensions.Primitives.3.0.1' to folder 'C:\Users\srz'
Successfully installed 'Microsoft.Extensions.Primitives 3.0.1' to C:\Users\srz
Executing nuget actions took 635.5 ms

【讨论】:

这似乎与nuget.exeInstall-Package 命令无关。有时 Feed 不会很快更新,并且需要时间(可能是一个小时)才能从上游包源获取更新。

以上是关于带有 NuGet 上游源的 Azure DevOps Artifacts 源的安装包失败的主要内容,如果未能解决你的问题,请参考以下文章

配置了 Azure AD RBAC 的 Azure DevOp Pipelines 对 AKS 的身份验证?

NuGet的国内镜像

Azure DevOp 将网站部署在一个主网站下

NuGet微软官方中国国内镜像

NuGet微软官方中国国内镜像

Azure 部署:配置数据库依赖项引发错误“无法配置 NuGet 包”