gpt4 book ai didi

c# - NuGet 客户端 SDK - 通过代码连接到私有(private) NuGet 源

转载 作者:行者123 更新时间:2023-12-04 00:20:44 24 4
gpt4 key购买 nike

我正在通过 Azure DevOps 使用私有(private) NuGet 源。
要从代码中查看有关 public 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,

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

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);
}

但是,无论我做什么,我都无法通过步骤

var resource = await repository.GetResourceAsync<PackageMetadataResource>();

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

我应该如何从代码中识别 Azure DevOps 提要,以便能够获取 IPackageMetadata 信息?

最佳答案

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

如果您安装了 Visual Studio,或者安装了 Azure Artifacts NuGet credentials provider ,也许您可​​以尝试在代码中不使用任何凭据。我不确定 nuget.exe、dotnet cli 和 msbuild 究竟是如何发现凭据提供程序的,但也许它在使用 sdk 时也可以工作。

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

关于c# - NuGet 客户端 SDK - 通过代码连接到私有(private) NuGet 源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60885348/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com