无法使用 NuGet 上游源从 Azure DevOps Artifacts 源下载某些包

问题描述

我创建了一个 Azure Artifact Feed 并将 nuget 库配置为上游,但是当我尝试安装包 Newtonsoft.Json.Bson 时,它总是失败并显示错误Install-Package : NU1101: Unable to find package Newtonsoft.Json.Bson. No packages exist with this id in source(s): MyFeed,Microsoft Visual Studio Offline Packages,这非常令人困惑,有些包可以正常工作,但有些包可以正常工作不是。

enter image description here

解决方法

您必须允许从公共存储库获取已从私有存储库获取的包。

请参阅文档 here

以下是文档中的 powershell 片段,允许从公共存储库中获取包:

$env:PATVAR = "YOUR_PAT_GOES_HERE"
$token = [Convert]::ToBase64String(([Text.Encoding]::ASCII.GetBytes("username:$PatVar")))
$headers = @{
    Authorization = "Basic $token"
}
$url = 
    "https://pkgs.dev.azure.com/{OrganizationName}/{ProjectName}/_apis/packaging/feeds/{FeedName}/{Protocol}/packages/{PackageName}/upstreaming?api-version=6.1-preview.1"
$body = '{"versionsFromExternalUpstreams": "AllowExternalVersions"}'
    
Invoke-RestMethod -Uri $url -Headers $headers -Body $body -Method Patch -ContentType "application/json"
,

为了让您的提要提供确定性还原,请务必确保您的包提要配置文件(.npmrc_ 或 _nuget.config)仅引用启用了上游源的 Azure Artifacts 提要。对于 NuGet,<packageSources> 部分应如下所示:

<packageSources>
  <clear />
  <add key="FabrikamFiber" value="https://pkgs.dev.azure.com/fabrikam/_packaging/FabrikamFiber/nuget/v3/index.json" />
</packageSources>

<clear /> 标记是必需的,因为 NuGet 组合了多个 配置文件来确定要使用的全套选项。 <clear /> 告诉 NuGet 忽略所有其他定义的 <packageSources> 在更高级别的配置文件中。