本文介绍了Nuget客户端SDK-通过代码连接到私有NuGet提要的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在通过Azure DevOps使用私有NuGet源。
要从代码查看有关公共NuGet包的信息,只需按照文档here操作即可。特别是:

ILogger logger = NullLogger.Instance;
CancellationToken cancellationToken = CancellationToken.None;

SourceCacheContext cache = new SourceCacheContext();
SourceRepository repository = Repository.Factory.GetCoreV3("https://api.nuget.org/v3/index.json");
PackageMetadataResource resource = await repository.GetResourceAsync<PackageMetadataResource>();

IEnumerable<IPackageSearchMetadata> packages = await resource.GetMetadataAsync(
    "Newtonsoft.Json",
    includePrerelease: true,
    includeUnlisted: false,
    cache,
    logger,

我正在尝试通过将我的凭据添加到流程中来为我自己的私人提要实现同样的结果:

var logger = NullLogger.Instance;
var cancellationToken = CancellationToken.None;

var cache = new SourceCacheContext();    
var source = new PackageSource("*my feed*/nuget/v3/index.json");
source.Credentials = new PackageSourceCredential("*my feed*/nuget/v3/index.json", "*username*", "*password*", true, null);

var repository = Repository.Factory.GetCoreV2(source);
var resource = await repository.GetResourceAsync<PackageMetadataResource>();

IEnumerable<IPackageSearchMetadata> searchMetadata = await resource.GetMetadataAsync(
    "My.Package.Name",
    includePrerelease: true,
    includeUnlisted: false,
    cache,
    logger,
    cancellationToken);
请注意,即使我调用Factory.GetCoreV2(),该方法的内部仍然调用V3提供程序。它是唯一一个将PackageSource作为参数的构造函数:

public static SourceRepository GetCoreV2(this Repository.RepositoryFactory factory, PackageSource source)
{
     return Repository.CreateSource(Repository.Provider.GetCoreV3(), source);
}

然而,无论我做什么,我都无法通过步骤

,它总是失败,并显示NuGet.Protocol.Core.Types.FatalProtocolException - 401 Unauthorised。我已经验证了我的凭据和提要端点的有效性,以及我在提要中的权限(完全访问)。我也尝试了here描述的初始化过程(加上我的凭据的步骤),但结果是相同的。

如何从代码向Azure DevOps源标识以能够获取IPackageMetadata信息?

推荐答案

Azure DevOps不支持通过NuGet进行用户名和密码身份验证。如果您的帐户需要双因素身份验证(2FA),NuGet没有办法提示您进行身份验证。我不知道他们是否决定不支持所有帐户,即使是未启用2FA的帐户,或者是否也有其他原因(我怀疑出于其他安全原因不允许)。

如果您已安装了Visual Studio或以其他方式安装了Azure Artifacts NuGet credentials provider,或许您可以尝试在代码中不使用任何凭据。我不确定nuget.exe、DotNet cli和msBuild究竟是如何发现凭据提供程序的,但在使用SDK时可能也会起作用。

否则,如果您想要或需要使用凭据API,则需要生成personal access token并将其用作密码。

这篇关于Nuget客户端SDK-通过代码连接到私有NuGet提要的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-29 23:07