401使用nuget.core访问VSTS Feed时

时间:2017-09-05 11:42:36

标签: c# nuget

我试图让nuget.core从VSTS使用我的PAT。

我正在配置这样的凭据:

var credentials = new NetworkCredential("packageTester", "MY_PAT_STRING");
CredentialStore.Instance.Add(new Uri("https://myFEED.pkgs.visualstudio.com/_packaging/BetaFeed/nuget/v3/index.json"), credentials);

(名称可以是documentation

的任何内容

然后查询Feed:

var repo = PackageRepositoryFactory.Default.CreateRepository(                "https://myFEED.pkgs.visualstudio.com/_packaging/BetaFeed/nuget/v3/index.json");
var packages = repo.GetPackages();

它无法正常工作,我收到401错误。

关于同一主题还有另外两个问题:

对我来说都不起作用。我检查了github上的Nuget.Core source code,看它是否使用了CredentialStore。但是我仍然得到401并且无法弄清楚原因。

编辑:它确实有效,重建项目并没有重建所有内容。但是,URL不起作用。我明白了:

  

System.InvalidOperationException:'无法连接到' https://onetrueerror.pkgs.visualstudio.com/_packaging/BetaFeed/nuget/v3/index.json'指定的Feed。请验证包源(位于包管理器设置中)是否有效并确保您的网络连接。'

如果我从Feed网址中删除index.json,我会收到以下错误:

  

System.Net.WebException:'远程服务器返回错误:(404)Not Found。'

1 个答案:

答案 0 :(得分:0)

Nuget.Core似乎不支持v3的包源。 因此,正确的解决方案是:

配置凭据(使用PackageRepositoryFactory之前)

var credentials = new NetworkCredential("packageTester", "MY_PAT_STRING_FROM_VSTS");
CredentialStore.Instance.Add(new Uri("https://YourProject.pkgs.visualstudio.com/_packaging/YourFeedName/nuget/v2/"), credentials);

这是有效的,因为Nuget.Core中的homebrewn HttpClient在内部使用HttpWebRequest并使用CredentialsCache进行配置。

确保连接到Feed的版本2.

VSTS为您提供了一个供稿网址:

  

https://YourProject.pkgs.visualstudio.com/_packaging/YourFeedName/nuget/v3/index.json

将其更改为:

  

https://YourProject.pkgs.visualstudio.com/_packaging/YourFeedName/nuget/v2/

..当你使用Nuget.Core时。

完整代码

//configure credentials
var credentials = new NetworkCredential("packageTester", "MY ");
CredentialStore.Instance.Add(new Uri("https://YourProject.pkgs.visualstudio.com/_packaging/YourFeedName/nuget/v3/"), credentials);

//download packages
var repo = PackageRepositoryFactory.Default.CreateRepository("https://YourProject.pkgs.visualstudio.com/_packaging/YourFeedName/nuget/v2/");
var packages = repo.GetPackages();