我有一个在私有代理中运行的.NET解决方案的构建。该解决方案包含.NET Core 2.1和.NET Standard 2.0项目。
安装的一些nuget包如下:
尝试使用以下错误恢复nuget包时,构建失败:
“F:\ Agent01 \ w \ 141 \ s \ xxxxxxx.sln”(恢复目标)(1) - >(恢复目标) - > C:\ Program Files \ dotnet \ sdk \ 2.1.500 \ NuGet.targets(114 ,5):错误:无法加载源https://xxxxxxxxxx.pkgs.visualstudio.com/_packaging/xxxxxxxxxx/nuget/v3/index.json的服务索引。 C:\ Program Files \ dotnet \ sdk \ 2.1.500 \ NuGet.targets(114,5):错误:响应状态代码不表示成功:401(未授权)。
构建任务如下:
这是构建代理中%appdata%\NuGet\nuget.config
文件的内容:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
<add key="MyFeed" value="https://xxxxxxxxxx.pkgs.visualstudio.com/_packaging/xxxxxxxxxx/nuget/v3/index.json" />
</packageSources>
<packageSourceCredentials>
<MyFeed>
<add key="Username" value="LocalBuildAgent" />
<add key="ClearTextPassword" value="xxxxxxxxxxx" />
</MyFeed>
</packageSourceCredentials>
</configuration>
我已经检查了一些类似的问题,但到目前为止,我无法找到解决问题的方法。
一些说明:
我错过了什么?如何解决这个问题?为什么我不能使用dotnet restore
命令恢复软件包?
使用旧的Nuget Restore任务时,包可以正确恢复,如下所示:
我可以使用.NET Core任务v1恢复软件包:
或者使用带有参数--force
的v2任务:
我找到了一个解决方案 - 将以下包源添加到%appdata%\NuGet\nuget.config
:
<add key="Microsoft Visual Studio Offline Packages" value="C:\Program Files (x86)\Microsoft SDKs\NuGetPackages\" />
完整文件如下所示:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<add key="Microsoft Visual Studio Offline Packages" value="C:\Program Files (x86)\Microsoft SDKs\NuGetPackages\" />
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
<add key="MyFeed" value="https://xxxxxxxxxx.pkgs.visualstudio.com/_packaging/xxxxxxxxxx/nuget/v3/index.json" />
</packageSources>
<packageSourceCredentials>
<MyFeed>
<add key="Username" value="LocalBuildAgent" />
<add key="ClearTextPassword" value="xxxxxxxxxxx" />
</MyFeed>
</packageSourceCredentials>
</configuration>
另外,检查Regression in .NET SDK 500: 'dotnet tool install' fails with 401 (Unauthorized) when there is a private feed in NuGet.config #7524。此问题似乎是由.NET SDK 2.1.500引起的。
另一种解决方法是卸载该版本:
.NET Core SDK 2.1.400中不存在此问题,例如卸载.NET Core SDK 2.1.500时它会消失,并在再次安装SDK 2.1.500时重新出现。
使用最新的“使用.NET Core sdk 2.1.504”任务为我工作。似乎有一些有缺陷的.NET Core sdk 2.1.5xx版本。
我遇到了同样的问题,但原因不同 - 没有授予PAT适当的访问标志。 PAT需要打包(创建,读取,更新和删除订阅源和包)作用域,我之前只将PAT设置为具有构建范围(工件,定义,请求,队列构建和更新的构建属性) )错误的文物包括私人包裹饲料!
VS(2015年和2017年)的用户体验虽然没有任何帮助,但两个版本都反复弹出凭证对话框,而不是提供有关原因可能的更多信息(除了401错误响应,线索是在“未经授权”一词虽然......)。
总结使用私有DevOps包源的步骤 -
nuget.exe sources add -name {your_package_feed_name} -source https://pkgs.dev.azure.com/{your_org}/_packaging/{your_feed}/nuget/v3/index.json -username PATForPackages -password {the_pat_value_you_got_from_azure_devops}
注意:nuget sources add将Base-64编码为packageSourceCredentials密码设置。同样在您的用户配置文件中,NuGet.config文件相对安全,只要您保证它在那里是安全的,缺点是这是主机先决条件,这是nuget没有内置Azure DevOps身份验证的结果。