问题描述
我创建了一个 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
,这非常令人困惑,有些包可以正常工作,但有些包可以正常工作不是。
解决方法
您必须允许从公共存储库获取已从私有存储库获取的包。
请参阅文档 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>
在更高级别的配置文件中。